Problem z odczytem EEPROMu przez ATtiny2313[Bascom]

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
Jasam
Użytkownik
Posty: 422
Rejestracja: 27 mar 2007, 21:09

Problem z odczytem EEPROMu przez ATtiny2313[Bascom]

Post autor: Jasam » 21 sie 2008, 8:52

Jak w temacie, ale próbuję bardziej nakreślić sprawę.
Otóż od dłuższego czasu z powodzeniem bawię się eepromami at24c256 za pomocą atmegi8. Z łatwością mogłem zczytywać dane i je zapisywać. Atmega była taktowana wewnętrznym kwarcem 8MHz. Ale ostatnio chciałem zbudować projekcik, do którego nie był potrzebny taki procek jak Mega i dlatego zapragnąłem wykrozystać Attiny2313. Podłączyłem podobnie jak do ATmegi8, dałem rezystorki podciągające 4,7K itd... Ustawiłem Fusy(nic strasznego) tak by procek działał z zewnętrznym kwarcem 16MHz(potrzebna była szybkość wieksza niż 8) a tu psikus! Procek wykonuje program. Mryga diodką i próbuje odczytac eeprom ale mu sie nie udaje(zawartosc kolejnych komorek jak widac z programu ma sie pojawiac binarnie na porcie B). Eeprom jest na pewno sprawny bo na atmedze dalej działa-podobnie jak na komputerze. Sprawdzałem też przy taktowaniu zarówno wewnętrznym jak i zewnetrznym 8 MHz. Taki sam efekt. Dlaczego na tiny 2313 wystepuje taki problem? Jak go rozwiazać? Jakies pomysły? Poniżej programik, fusy i schemat.

Kod: Zaznacz cały

$regfile = "attiny2313.dat"
$crystal = 16000000
Config Scl = Portd.6
Config Sda = Portd.5
'Config I2cdelay = 1
Config Portd.4 = Output
Config Portb = Output

Declare Function Czytaj(byval Adres As Word)as Byte
Dim Zawartosc As Byte
Dim Licznik As Word
Zawartosc = 0
Licznik = 0

Set Portd.4
Wait 1
Reset Portd.4
Do
Zawartosc = Czytaj(licznik)
Portb = Zawartosc
Incr Licznik
If Licznik > 32678 Then
Licznik = 0
Toggle Portd.4
Wait 1
Toggle Portd.4
End If
Loop

Function Czytaj(byval Adres As Word)as Byte
Local Msb As Byte
Local Lsb As Byte
Local Dane As Byte
Lsb = Adres And 255
Shift Adres , Right , 8
Msb = Adres And 255
I2cstart
I2cwbyte 160
I2cwbyte Msb
I2cwbyte Lsb
I2cstart
I2cwbyte 161
I2crbyte Dane , Nack
I2cstop
Czytaj = Dane
End Function
Obrazek
Obrazek

snow
Użytkownik
Posty: 794
Rejestracja: 16 sty 2007, 3:44
Lokalizacja: lubelskie
Kontakt:

Post autor: snow » 21 sie 2008, 9:21

Może dlatego że I2C jest na PB7 i PB5? Przynajmniej z dokumentacji tak wynika ;)

Obrazek

Na przyszłość patrz do PDF'a a nie do bibliotek w Eagle'u

[ Dodano: 2008-08-21, 10:23 ]
Aa bo w Bascomie się da ręcznie konfigurować i2c ;) To nie wiem dlaczego :)

Jasam
Użytkownik
Posty: 422
Rejestracja: 27 mar 2007, 21:09

Post autor: Jasam » 21 sie 2008, 9:24

Trzeba zawsze podłączać do dedykowanych końcówek procesora? Myslałem, że skoro wysttępują configi scl i sda w bascomu to, że można je skonfigurować na dowolny port. Nie ma takiej możliwości? Z tego co wyczytałem z manuala to powinno sie dać. Zależałoby mi na tym poniewać portb jako ośmiobitowy jest mi potrzebny do innych celów.
PS: Patrzę do datasheeta zawsze a nie do eaglowskiej biblioteki.

Awatar użytkownika
radzio
Użytkownik
Posty: 573
Rejestracja: 07 gru 2004, 23:06
Lokalizacja: Sosnowiec
Kontakt:

Post autor: radzio » 21 sie 2008, 11:42

Przede wszystkim należy zrozumieć różnicę pomiędzy programową implementacją I2C która może być zrealizowana na dowolnych wyprowadzeniach a sprzętowym układem I2C, czy też TWI, który jest na stałe przypisany do określonych wyprowadzeń. W dokumentacji od Bascoma ta róznica jest wyraźnie zaznaczona. Nie widzę sensu snucia filozoficznych wywodów typu "myślałem", "wydaje mi się" przed dogłębnym zapoznaniem się z dokumentacją. Przestańcie wkońcu mechanicznie kopiować gotowce z helpa czy netu a zacznijcie wkońcu myśleć (wiem, że Bascom temu nie sprzyja no ale nic na to nie poradzę).

Pozatym ATtiny2313 nie posiada układu TWI, lecz USI, który nie jest "pełnoprawnym" TWI, tylko posada pewne mechanizmy wspomagające transmisję, jakie - zapraszam do przeczytania oraz zrozumienia dokumentacji.

Jasam
Użytkownik
Posty: 422
Rejestracja: 27 mar 2007, 21:09

Post autor: Jasam » 21 sie 2008, 13:40

Nie obrażaj mnie posądzając o mechaniczne kopiowanie(programik napisałem jakiś czas temu na Atmegę8 i działął idealnie-na Tiny też powinien o ile się orientuję). Jeśli chcesz wiedzieć akurat ten program nie został skopiowany przeze mnie z helpa. Zarówno w atmedze8 nie korzystałem ze sprzętowego TWI, jak i w tym układzie (jak nie zadając sobie wiele trudu można odczytac ze schematu) chciałem skorzytać z programowej obsługi interfejsu I2C. Na atmedze jak już mówiłem działało idealnie. Więc dlaczego nie działa na Attiny2313? Twi nawet nie włączałem (w atmedze), a śmigało aż miło. Twój post użytkowniku radzio akurat do tego tematu nic nie wniósł (ani filozoficznie, ani niefilozoficznie).

ODPOWIEDZ