Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 18 kwi 2026, o 21:38


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
Autor Wiadomość
 Tytuł: I2C PCF8574
PostNapisane: 7 kwi 2013, o 10:06 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 lut 2013
Posty: 376
Lokalizacja: Kłopoty-Stanisławy
Pomógł: 33

Witam

Na wstępie chciałbym prosić o wyrozumiałość jeśli popełnię jakieś błędy :)
Jest to mój pierwszy wątek.

Mój problem to najstarszy bit w układzie PCF8574.

Przy odczytywaniu nie ma najmniejszego problemu.
Przy wpisywaniu do układu samych 1, też nie ma problemu.
Przy wpisaniu do układu 0 nie ma problemu przy bitach 0-6.
Przy bicie 7, bez względu na sposób jego wpisania - czy to przycisk zwarty do masy czy wpisanie programowe układ "kończy" pracę w pętli
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Wartość rejestru TWCR podczas "zapętlenia się" to 00100100.

w funkcji unsigned char pcf8754_send_start (void)

Ta funkcja jest dokładnie taka sama jak systemowa TWI_start() .

plik pcf8754.c jest w zasadzie kopią ogólnie przyjętej obsługi sprzętowej I2C. Dodatkowo są tylko funkcje set_inputs i get_inputs.

oto jego źródło:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Funkcje lcd_locate i lcd_str są tu dopisane przeze mnie i służą jako debuger :)

Plik main.c :

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Obrazek

_________________
50 znaków Atnela ....



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: I2C PCF8574
PostNapisane: 7 kwi 2013, o 13:34 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27456
Lokalizacja: Szczecin
Pomógł: 1045

Ja proponuję koledze jak najszybciej pożegnać się z tymi kocimi typami

unsigned char

w avr gcc na rzecz przeznaczonych do tego

uint8_t

poza tym proszę mi podpowiedzieć co na tym schemacie robią te nie podłączone diody LED?

dlaczego kolega nie używa tak ważnego fiuczeru tego scalaka jak INT aby odczytywać np klawisze tylko gdy naciśnięty?

jeśli chodzi o rysowanie schematów to polecam prościutkiego i lekkiego Eagla wraz z tym poradnikiem:

http://goo.gl/A91tD

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: I2C PCF8574
PostNapisane: 7 kwi 2013, o 13:43 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 lut 2013
Posty: 376
Lokalizacja: Kłopoty-Stanisławy
Pomógł: 33

Ogólnie całe urządzenie jest znacznie większe. W ATMega zabrakło - portów stąd ekspander. Diody są częścią układu, ale na tą chwilę są zupełnie nie istotne.

Typy unsigned char są - dlatego że jest to gotowa biblioteka obsługi pcf8574.
Próbowałem zmieniać na uin8_t ale to nic nie zmieniło, więc powróciłem do oryginału.

INT nie jest mi potrzebne w tej chwili gdyż cały program i całe urządzenie będzie bardziej skomplikowane. Teraz chciałem tylko "ogarnąć" obsługę tego scalaczka (PCF8574).

Rysowanie schematu .....
Nie mogę nauczyć się EAGLE'a - mam niezbyt dużo czasu i raczej poświęcam go na próby nauczenia się "pROGRAMOWANIA".
Proteusa trochę znam i potrafię go wykorzystywać jako symulator - stąd schemat w Proteusie.

Panie Mirku czekam na kolejną książkę.

_________________
50 znaków Atnela ....



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: I2C PCF8574
PostNapisane: 7 kwi 2013, o 13:50 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27456
Lokalizacja: Szczecin
Pomógł: 1045

ok, .... ja jednak nie jestem w stanie analizować tej całej biblioteki do obsługi a szczególnie z tymi unsigned coś tam niepotrzebnie się wciąż plączącymi .... ale ok też się tego nie czepiam - skoro kolega uważa że wszystko ok to dobrze...

ja jednak polecałbym użyć bibliotek do obsługi I2C z książki

http://atnel.pl/mikrokontrolery-avr-jezyk-c.html

bo sam na tych bibliotekach kiedyś robiłem sobie obsługę tych scalaków - i nie odnotowałem żadnych nawet najmniejszych kłopotów....

ale może ktoś z forum jak będzie miał tyle czasu to popatrzy w tą bibliotekę.

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: I2C PCF8574
PostNapisane: 7 kwi 2013, o 15:36 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 lut 2013
Posty: 376
Lokalizacja: Kłopoty-Stanisławy
Pomógł: 33

W kwestii książek - bardzo niedawno zakupiłem obydwie Pana książki i za każdym razem kiedy czytam o obsłudze I2C to mam wrażenie, że autor zbyt mocno wierzy w szybkość pojmowania niektórych rzeczy przez użytkowników. Z jednej strony jest tam całkiem spory opis ale jakoś nie mogę tego zrozumieć.

Przy użyciu funkcji TWI_write_buf() program zatrzymuje się na poleceniu

while (len--) TWI_write(*buf++);

w main.c

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Adres bajtu do odczytu (0x00) powinien być raczej dobry, dlatego że pcf8754.c bezbłędnie odczytuje wartości przy użyciu tego adresu.

I jest to dla mnie podobna "czarna dziura" co z wykorzystaniem biblioteki pcf8754.c.

Po prostu nie rozumiem dlaczego tak się dzieje i nie wiem gdzie szukać.

_________________
50 znaków Atnela ....



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: I2C PCF8574
PostNapisane: 7 kwi 2013, o 15:45 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

acid3 napisał(a):
unsigned char pcf8574_send_start (void)
{
        /*writing a one to TWINT clears it, TWSTA=Start, TWEN=TWI-enable*/
        TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTA);
        /*wait, until start condition has been sent --> ACK*/
        while (!(TWCR&(1<<TWINT)))
        return TWSR;
}

Brak średnika za while() w tym przypadku jest błędem.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: I2C PCF8574
PostNapisane: 7 kwi 2013, o 15:58 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 lut 2013
Posty: 376
Lokalizacja: Kłopoty-Stanisławy
Pomógł: 33

Rzeczywiście średnika nie było. Kompilator (Eclipse + WINAVR) nie zgłaszał błędów. :oops:
Program dalej działa dokładnie tak samo.

_________________
50 znaków Atnela ....



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: I2C PCF8574
PostNapisane: 7 kwi 2013, o 16:19 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27456
Lokalizacja: Szczecin
Pomógł: 1045

acid3 napisał(a):
... i za każdym razem kiedy czytam o obsłudze I2C to mam wrażenie, że autor zbyt mocno wierzy w szybkość pojmowania niektórych rzeczy przez użytkowników. Z jednej strony jest tam całkiem spory opis ale jakoś nie mogę tego zrozumieć.....


hmm no bardzo mi przykro, ale to może troszkę niesprawiedliwy osąd że ja wierzę że ktoś szybko czy tam wolno czy jakoś coś pojmie. Opisuję jak potrafię - ale czy to oznacza, że do każdego dotrę ? pewnie nie i być może tu mamy taki przykład.

Jednak nie rozumiem w takiej sytuacji zachowania polegającego na tym, że kolega nawet nie spróbuje kodów dołączonych na DVD bo sądząc po błędzie, który kolega wyżej opisał - domniemuję że co najwyżej próbujesz przepisywać z książki a gdy coś nie wyjdzie to się poddajesz za szybko zamiast:

1. jeszcze raz mówię - sięgnąć do sprawdzonych i mozolnie przygotowywanych przeze mnie kodów na DVD a też przecież tworzony były z myślą o edukacji w tym zakresie - sam bowiem często mam tak, że gdy mi coś z jakąś książką nie wychodzi to chciałbym mieć poprawnie działający kod na płycie aby przetestować czy gdzieś po prostu literówka mnie nie zgubiła przy przepisywaniu z książki. Jak widzisz książkę pisałem tak - jakbym chciał sam widzieć ją gdy się uczyłem podstaw

2. skoro nie działa przykład z książki to ja na twoim miejscu zamiast szukać innych bibliotek z netu postarałbym się albo skontaktować z autorem (ja nie unikam kontaktów i potwierdzi to wiele osób), albo zajrzał np na to forum i dopytał o to czego nie rozumiem bo i tu staram się udzielać ale jak widać nie tylko ja - jest tu także na szczęście już mnóstwo osób, które pomagają chętnie

i wtedy na prawdę przy takim wsparciu oraz przy poradnikach które piszę na blogu czy poradnikach video do książek które tworzę na youtube - można się spokojnie i w swoim tempie uczyć. Ja sam nie jestem żadnym geniuszem i jeszcze nigdy w życiu nie udało mi się opanować jakiegoś języka programowania na podstawie jednego czy dwóch czytań książki , ba żeby tylko jednej książki

teraz się staram nauczyć Javy dla Androida - i mam masakrę, pomimo że mam już pod ręką 5 czy 6 książek - a idzie mi to jak krew z nosa przy czym ZERO wsparcia od autorów czy jakichś kodów z płyt dołączonych do książek .....

reasumując - każdy uczy się w swoim tempie i ja nikogo nie staram się poganiać ale zachęcam do skorzystania z wielu kanałów wspomagających - tyle że jak widać nie wszyscy (ku mojemu zdumieniu) chcą z nich skorzystać :( - wtedy to już nic nie poradzę, a z uwagi na to co robię nie mam aż tyle czasu aby analizować inne biblioteki i proszę się za to na mnie nie gniewać.

------------------------ [ Dodano po: 2 minutach ]

acid3 napisał(a):
Rzeczywiście średnika nie było. Kompilator (Eclipse + WINAVR) nie zgłaszał błędów. :oops:


To że nie było średnika - nie było żadnym błędem z punktu syntaktyki języka C - dlatego kompilator nie zgłaszał błędu. To był błąd logiczny programisty - często się przydarza ;) chyba każdemu z nas .... kiedyś się takie coś przydarzyło więc nie ma co się martwić. Bez średnika - pętla wykonywała, kolejną instrukcję.

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 6 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO