Aktyw Forum

Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.

Sprawdź punkty Zarejestruj się

AVT 5154 - niedziałające funkcje

sinuhe
-
-
Posty:4
Rejestracja:9 lut 2008, o 11:03
Lokalizacja:Warszawa
AVT 5154 - niedziałające funkcje

Postautor: sinuhe » 31 sty 2009, o 13:01

Witam.
Właśnie piszę programik obsługujący LCD poprzez I2C. Problem w tym, że niektóre funkcje kitu zdają się nie żyć.
Konkretnie wysłanie takich funkcji jak 0xA1, 0xA2 - czyli wyświetlanie liczby typu bajt i word, zwraca informacje o błędzie komunikacji.

Czy to pomyłka w druku w EP, czy rzeczywiście ktoś (autor?) nie zaimplementował tych funkcji w kitowym procku.

robertw
-
-
Posty:59
Rejestracja:24 lis 2008, o 08:06
Lokalizacja:Mińsk/Wa-wa

Postautor: robertw » 31 sty 2009, o 15:31

Witam,
Wszystkie funkcje zostały zaimplementowane. Musisz wysłać odpowiednią liczbę danych -dla 0xA1 - jeden bajt, dla 0xA2- 2 bajty. Gdzie otrzymujesz ten komunikat? Format ramki : Start – Adres ACK – Numer Funkcji ACK – Dana(1) ACK … Dana(x) ACK – Stop. Może zmniejsz szybkość transmisji...robertw

sinuhe
-
-
Posty:4
Rejestracja:9 lut 2008, o 11:03
Lokalizacja:Warszawa

Postautor: sinuhe » 31 sty 2009, o 15:55

W momencie gdy pod numerem funkcji mam 0xA1, układ krzyczy o błędzie.
Natomiast wszystkie inne funkcje, tzn. pisanie znaku, sterowanie kontrastem, jasnością wyświetlacza, włączanie i wyłączanie diod działa świetnie. Jeżeli chodzi o problemy natury czasowej, to dodanie kilku milisekundowego delaya za stopem, a przed kolejnym startem załatwiło wszystkie problemy z niestablinościa zachowania kitu.

Korzystam z biblioteki I2C (TWI) Master Software Library by Peter Fleury.
Przykładowa funkcja zmiany kontrastu wygląda tak:

Kod: Zaznacz cały

void Contrast(unsigned char addr, unsigned char data) { unsigned char ret; ret = i2c_start(addr+I2C_WRITE); if ( ret ) { i2c_stop(); delay_ms(50); }else { i2c_write(0x64); i2c_write(data); i2c_stop(); delay_ms(50); } }
Natomiast "wyświetl bajt" wygląda tak i nie działa:

Kod: Zaznacz cały

void PutByte(unsigned char addr, unsigned char data){ unsigned char ret; ret = i2c_start(addr+I2C_WRITE); if ( ret ) { i2c_stop(); delay_ms(50); }else { i2c_write(0xA1); i2c_write(data); i2c_stop(); delay_ms(50); } }

robertw
-
-
Posty:59
Rejestracja:24 lis 2008, o 08:06
Lokalizacja:Mińsk/Wa-wa

Postautor: robertw » 31 sty 2009, o 16:07

Witam,
Sprawdziłem u mnie i jest OK. Pokaż schemat swojego sterownika, napiszę prosty program, prześlę Ci BINa, zaprogramujesz i zobaczymy. Układ jest prosty i nie było z nim problemu, wykorzystuje TWI Atmegi8. Może jakieś problemy z połączeniem magistrali, zakłócenia, za szybko itp. Może kwestia Twojej biblioteki. Po co jest "ret = i2c_start(addr+I2C_WRITE);" robertw

sinuhe
-
-
Posty:4
Rejestracja:9 lut 2008, o 11:03
Lokalizacja:Warszawa

Postautor: sinuhe » 31 sty 2009, o 16:46

Mam płytę STK500 a na niej ATMEGA16. Do linii PC0 i PC1 odpowiednio podłączone SCL i SDA kitu. W kicie są rezystory podciągające do +5V po 4.7k. Kit zasilany z STK500.
Dostępne do wykorzystania mam ledy na PORTB i przyciski na PORTD


ret = i2c_start(addr+I2C_WRITE); według dokumentacji bilbioteki to:

Issues a start condition and sends address and transfer direction
addr address and transfer direction of I2C device
0 device accessible
1 failed to access device

Czyli wykonuje start magistrali wysyłając adres z bitem kierunku. czyli np u mnie 0x80+0x00.
Zwraca 1 gdy urządzenie nie odpowiedziało - w dalszej części programu "1" powoduje wywołanie wyłączenie magistrali i2c_stop().

Prędkości testowałem różne, nawet na 10kHz funkcja A1 nie działa.

Wątpię żeby to było spowodowane zakłóceniami lub problemami z połączeniem. Właśnie dopisałem funkcję do wysyłania zawartości tablicy2x16 na wyświetlacz i działa bardzo dobrze i w 100% powtarzalnie.
Jedynie przy tej funkcji 0xA1 mam ten "User Program transmit error". Wg artykułu w EP, taki komunikat wyświetla się przy niekompletnej ramce, albo nieznanej funkcji.
Niestety nie mam możliwości podejrzenia oscyloskopem co tam na magistrali się dzieje.

Dodano po chwili:

Dokładny opis biblioteki znajduje się http://homepage.hispeed.ch/peterfleury/ ... aster.html
Ostatnio zmieniony 31 sty 2009, o 17:11 przez sinuhe, łącznie zmieniany 1 raz.

robertw
-
-
Posty:59
Rejestracja:24 lis 2008, o 08:06
Lokalizacja:Mińsk/Wa-wa

Postautor: robertw » 31 sty 2009, o 17:22

Witam,
Zaszła pomyłka przy edycji dokumentu : mea culpa :-(.

Rozkazy:
- 0xA0 powinien być 0x0A (dec 10)
- 0xA1 powinien być 0x0B (dec 11)
- 0xA2 powinien być 0x0C (dec 12)

Wszystko powinno być już OK. Dziękuję za zwrócenie uwagi... robekw

PS.
Tak na marginesie komunikat jest poprawny :-).

sinuhe
-
-
Posty:4
Rejestracja:9 lut 2008, o 11:03
Lokalizacja:Warszawa

Postautor: sinuhe » 31 sty 2009, o 17:31

Super! I teraz wszystko działa! Dzięki za pomoc!

Wróć do „Kity AVT”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 36 gości