ATTiny2313 +FRAM+I2C+BASCOM = problem ??

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
Awatar użytkownika
kayron
Użytkownik
Posty: 2088
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

ATTiny2313 +FRAM+I2C+BASCOM = problem ??

Post autor: kayron » 12 wrz 2009, 10:39

Witam, borykam się od jakiegoś czasu z następującym problemem, do procesora ATTiny 2313 taktownego wewnęcznym oscylatorem RC, podpiołem pamięć FRAM FM2404 na I2C (512B), ale użyłem do tego celu pinów Portu A, czyli związanych normalnie z oscylatorem zewnętrznym. Działa mi poprawnie wykrywanie układu I2C, tzn. jeżeli nie ma go w podstawce to wyświetla mi się komunikat ERROR, natomiast jak jest w podstawce to zostaje wykryty. Niestety nie działa mi prawidłowo już odczyt i zapis do tej pamięci?? Mimo iż adresy są stałe, to pojawiają mi sie jakieś bzdety w pamięci, nawet w komórkach w których nie powinno dochodzić do zapisu ?? Oporniki podciągające mają 2,2KΩ.
Nie wiem co jest nie tak ?? Program napisany w bascom.
Procedury odczytu i zapisu.

Kod: Zaznacz cały

Sub Write_fram(byval Adres As Byte , Byval Dane As Byte)
   I2cinit
   I2cstart
   I2cwbyte Fram_write
   I2cwbyte Adres
   I2cwbyte Dane
   I2cstop
   Waitms 10
End Sub

Sub Read_fram(byval Adres As Byte , Byval Dane As Byte)
   I2cinit
   I2cstart
   I2cwbyte 160
   I2cwbyte Adres
   I2cstart
   I2cwbyte 161
   I2crbyte Dane , Nack
   I2cstop
   Waitms 10
End Sub
Oraz inicjacja portu I2C i procedura startu systemu.

Kod: Zaznacz cały

Config Portb = Output
Portb = &B11111111
Config Portd = Output
Config Portd.5 = Input
Config Portd.6 = Input
Portd = &B11111111
Config I2cdelay = 10   'I2C na 100KHz
Config Scl = Porta.0
Config Sda = Porta.1
I2cinit
Ocr0a = 254                'konfiguracja T0 i jego start w trybie automatycznej kontroli
Tccr0a = Tcr0a             'trzeba robić z poziomu rejestrów CPU. BASCOM nie obsługuje
Tccr0b = T0_start          'tego procesora prawidłowo z funkcji bibliotecznych
Poz_wys = 1                'inicjacja pozycji do wyświetlania na ekranie
Vram(1) = Lookup(13 , Cgrom)       'napis powitalny
Vram(2) = Lookup(2 , Cgrom)
Vram(3) = Lookup(3 , Cgrom)
Vram(4) = Lookup(9 , Cgrom)
Waitms 500                 'czas wyświetlania napisu powitalnego. Wszystko obsługują przerwania od T0.
I2cstart
I2cwbyte Fram_write
I2cstop
If Err = 1 Then
   Vram(1) = Lookup(14 , Cgrom)
   Vram(2) = Lookup(15 , Cgrom)
   Vram(3) = Lookup(0 , Cgrom)
   Vram(4) = Lookup(1 , Cgrom)
   Waitms 500
   Licz = 0
Else
   Vram(1) = Lookup(12 , Cgrom)
   Vram(2) = Lookup(0 , Cgrom)
   Vram(3) = Lookup(16 , Cgrom)
   Vram(4) = Lookup(17 , Cgrom)
   Waitms 500
   Adres = 1
   Call Read_fram(adres , Dane)
   Licz_low = Dane
   Adres = 2
   Call Read_fram(adres , Dane)
   Licz_high = Dane
End If
Call Konwert

ODPOWIEDZ