Advertisement
miszczo

SI4703 HWD LIB

Apr 28th, 2013
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.36 KB | None | 0 0
  1. #include <avr/io.h>
  2. #include <util/delay.h>
  3. #include "si4703.h"
  4. #include "I2C/i2c.h"
  5. #include "../LCD/lcd44780.h"
  6. #include <util/twi.h>
  7.  
  8.  
  9. /**********************************************************************************
  10. Funkcja odczytująca wartoci rejestrów od adresu 0x0A - 0xFF a następnie 0x00 - 0x09
  11. (wszystkie 16 rejestrów dostępnych w SI4703)
  12. **********************************************************************************/
  13.  
  14. void si_read_reg(uint16_t *mybuf)
  15. {
  16.     uint8_t a;                      // Zmienna pomocnicza
  17.     uint8_t b;                      // Zmienna pomocnicza
  18.  
  19.     i2c_start();                    // Uruchomienie I2C
  20.     //if(TW_STATUS != TW_START) return;
  21.     i2c_write_byte(0x21);           // Wysłanie adresu odczytu Si4703
  22.     //if(TW_STATUS!=TW_MT_SLA_ACK) return;
  23.  
  24.  
  25.     for(b=0x0A;;)
  26.     {
  27.         if(b == 0x10) b = 0x00;     // Przeskok z adresu 0x0F do 0x00 w tablicy
  28.         a = i2c_read_byte(1);       // Odczyt 8 starszych bitów
  29.         mybuf[b] = (a<<8);          // Przesunięcie w lewo i wpisanie do tablicy
  30.         a = i2c_read_byte(1);       // Odczyt 8 młodszych bitów
  31.         mybuf[b] |= a;              // Wpisanie do tablicy
  32.         b++;                        // Inkrementacja adresu
  33.         if(b == 0x08)               // Jeżeli przed ostatni adres
  34.         {
  35.             a = i2c_read_byte(1);   // Odczyt 8 starszych bitów
  36.             mybuf[b] = (a<<8);      // Przesuinięcie w lewo i wpisanie do tablicy
  37.             a = i2c_read_byte(0);   // Odczyt 8 młodszych bitów
  38.             mybuf[b] |= a;          // Wpisanie do tablicy
  39.             return;                 // Wyjcie z funkcji
  40.         }
  41.     }
  42.     i2c_stop();                     // Zatrzymanie I2C
  43. }
  44.  
  45.  
  46. /**********************************************************************************
  47. Funkcja zapisująca wartoci do rejestrów z tablicy 16 elementowej z pod adresów
  48. tab[2]-tab[7] , podanie ALL wysle wsyztskie 7 rejestrów
  49. **********************************************************************************/
  50.  
  51.  
  52. void si_write_reg(uint16_t *mybuf , uint8_t rejestr)
  53. {
  54.  
  55.  
  56.  
  57.     i2c_start();                    // Uruchomienie I2C
  58.     _delay_ms(2);                   // Przerwa 100ms wg datasheet
  59.     i2c_write_byte(32);             // Wysłanie adresu zapisu SI4703
  60.     _delay_ms(20);
  61.  
  62.     uint8_t z;                      // Zmienna pomocnicza
  63.  
  64.     for(z=2;z<=rejestr;z++)
  65.     {
  66.         uint8_t a;                  // Zmienna pomocnicza
  67.  
  68.  
  69.         a = (mybuf[z] >> 8);        // Wczytaj do a starszy bajt
  70.         i2c_write_byte(a);          // Wyslij starszy bajt z a
  71.         a = (mybuf[z]);             // Wczytaj do a młodszy bajt
  72.         i2c_write_byte(a);          // Wylij młodszy bajt z a
  73.     }
  74.  
  75.     _delay_ms(2);
  76.     i2c_stop();                     // Zatrzymaj I2C
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement