f
Warning: Cannot modify header information - headers already sent by (output started at /home/anderian/ftp/www_forum/db/mysql4.php:1) in /home/anderian/ftp/www_forum/includes/sessions.php on line 548

Warning: Cannot modify header information - headers already sent by (output started at /home/anderian/ftp/www_forum/db/mysql4.php:1) in /home/anderian/ftp/www_forum/includes/sessions.php on line 549

Warning: Cannot modify header information - headers already sent by (output started at /home/anderian/ftp/www_forum/db/mysql4.php:1) in /home/anderian/ftp/www_forum/includes/page_header.php on line 343
And-Tech :: Zobacz temat - TWI na ATMega168 oraz PCF8574P w Bascom

Strona korzysta z plików cookie w celu realizacji usług zgodnie z Politykš prywatnoœci.

Możesz okreœlić warunki przechowywania lub dostępu do cookie w Twojej przeglšdarce lub konfiguracji usługi.

And-Tech Strona Główna And-Tech
Forum firmy And-Tech

FAQFAQ  SzukajSzukaj  UżytkownicyUżytkownicy  GrupyGrupy
RejestracjaRejestracja  ZalogujZaloguj  AlbumAlbum  DownloadDownload

Poprzedni temat «» Następny temat
TWI na ATMega168 oraz PCF8574P w Bascom
Autor Wiadomość
sza86

Dołączył: 14 Gru 2011
Posty: 6
Wysłany: Sro Gru 14, 2011 8:25 am   TWI na ATMega168 oraz PCF8574P w Bascom

Witam jak większość nowych napiszę: "Witam jestem nowy na forum i prosze o wyrozumiałość" ;p.
Nie jestem pewien czy dać to do AVR czy do programowania więc proszę ewentualnie moderatora o poprawę.

Do rzeczy zaczynam się uczyć programować, żeby rozwinąć swoje hobby. Wybrałem Bascoma gdyż wydaje mi się przyjazny.
Ostatnio zbudowałem pewien sterownik i chciałbym go rozbudować, ale przeszkadza mi w tym głównie poziom wiedzy, który zresztą dzięki Wam mam zamiar podnieść. Potrzebuję więcej portów powiedzmy 3wyjścia 1 wejście. Na ATM168 nie mam wolnych portów.
Chciałbym to zrobić tak, że zwalniam dwa porty do TWI(nie znalazłem nigdzie ale do TWI mogą być dowolne porty tylko trzeba je zdeklarować i ustawić w kodzie prawda?) wrzucam jakiś układ (posiadam wolny PCF8574P) w to miejsce a pod niego to co ściągłem z Megi plus to co jeszcze chcę mieć. Od str elektronicznej nie widze problemu( do podłączenia SDA i SDL zasilanie jest wspólne plus rezystory).
Wracając do programu to daję deklaracje które porty odpowiadają za linię danych i je konfiguruję czyli
Config Sda = Portd.4
Config Scl = Portd.5
Potem
I2cstart
I2cwbyte Adres
I2cstop

I tu problem jak sprawić aby żądany port był "załączony" lub nie? oraz jak czytać z danego portu?
W uP wiem że daję np xx Alias PORTD.3
i dalej
if warunek then xx = 1 else coś tam
a jak to się ma do expanderów?

Ech namieszałem ;/ mam nadzieję że komuś starczy cierpliwości aby mi odpowiedzieć z góry dzięki i przepraszam 8)
 
     
piotr94 
Site Admin

Dołączył: 02 Lut 2010
Posty: 606
Skąd: Kraków
Wysłany: Sro Gru 14, 2011 6:50 pm   

Po pierwsze:
Zapis:
Kod:

I2cstart
I2cwbyte Adres_write
I2cwbyte Wartosc_do_wystawienia 'jako wyjście - 1 na danym bicie oznacza wejście z podciąganiem do VCC, 0 oznacza "twarde" zwarcie do masy
I2cstop

Odczyt:
Kod:

I2cstart
I2cwbyte Adres_read
I2crbyte Wartosc_pobrana
I2cstop

I potem warunki sprawdzasz:
Kod:

If Wartosc_pobrana.nr_pinu = 0 then ...

Innymi słowy za każdym razem musisz odczytać dane z kostki.
Polecam poczytać nieco o i2c, przejrzeć notę katalogowa kostki.
_________________
http://www.piotr94.net21.pl/
 
     
sza86

Dołączył: 14 Gru 2011
Posty: 6
Wysłany: Sro Gru 14, 2011 10:42 pm   

Bardzo chętnie poczytam ale to co znalazłem po PL nie wiele mi wyjaśniło :(
Jeśli starczy Ci cierpliwości to co to jest za zmienna Wartosc_do_wyslania i może jakiś przykładzik z przykładowymi danymi?
 
     
piotr94 
Site Admin

Dołączył: 02 Lut 2010
Posty: 606
Skąd: Kraków
Wysłany: Czw Gru 15, 2011 8:12 am   

1. To poszukaj w języku Angielskim ;-)
2. Jest to bajt w którym poszczególne bity odpowiadają odpowiednim wyprowadzeniom układu
np. Wartosc_do_wyslania.1 = 1 a potem wysłanie tego bajta do układu spowoduje ustawienie pinu P1 jako wejścia z podciąganiem
_________________
http://www.piotr94.net21.pl/
 
     
sza86

Dołączył: 14 Gru 2011
Posty: 6
Wysłany: Pią Gru 16, 2011 10:54 pm   

Czyli powinno to wyglądać około:
Kod:
Config Sda = Portd.4
Config Scl = Portd.5


Potem w głównym programie chcąc się podłączyć pod obecne procedury czy mogę porostu dać
Kod:

 If T(1) >= T_min Then                     'wlacza sie przy t_min
 I2cstart
 I2cwbyte 112                              'przy A2 A1 A0 podciągniętych do GND
 I2cwbyte 0100XXX0                         'głupio mi ale nie rozumiem tych xxx jak nimi operować
                                           jeśli możesz podaj przykład np dla P1, czy to xxx to nr postu w post dziesiętnej?
 I2cstop


I skoro powiedzmy P1 jest ustawione w stan wysoki to na P1 układu powinienem mieć 5V a pozostałych 0V?
Oraz jak przypisać zewnętrznemu portu nazwę jak w asd Alias Pord.3 jest taka możliwość?
 
     
piotr94 
Site Admin

Dołączył: 02 Lut 2010
Posty: 606
Skąd: Kraków
Wysłany: Sob Gru 17, 2011 10:14 am   

Nie wiem czy zrozumiałeś jak to działa - tu nie przypiszesz temu nazwy - chcąc coś odczytać musisz odczytać cały bajt z układu a potem sprawdzić stany jego poszczególnych bitów.
To wogóle nie jest ani w 1% poprawny kod, co pokazałeś
Kod:
 If T(1) >= T_min Then                     'wlacza sie przy t_min
 I2cstart
 I2cwbyte 112                              'przy A2 A1 A0 podciągniętych do GND
 I2cwbyte 0b01000000                 'Pin P7 to WEJŚCIE z PODCIĄGANIEM DO VCC, pozostałe piny układu to WYJŚCIA ZWARTE DO GND       
 I2cstop
End If

Ogólnie jeszcze raz:
1. Poczytaj to: http://www.nxp.com/docume...eet/PCF8574.pdf
2. Poczytaj o I2C
_________________
http://www.piotr94.net21.pl/
 
     
sza86

Dołączył: 14 Gru 2011
Posty: 6
Wysłany: Sob Gru 17, 2011 12:12 pm   

A mógłbym prosić o jakiś przykładowy kod który by obsługiwał dowolne dwa porty tzn uP załącza je lub wyłącza może wtedy to jakoś rozkminię bo z dnia na dzień chyba rezygnuje z Bascom i wracam do Delphi i elektroniki :/
 
     
sza86

Dołączył: 14 Gru 2011
Posty: 6
Wysłany: Sob Gru 24, 2011 8:32 am   

Uff udało się. Dzięki za pomoc. Pozostał mi tylko problem jak wyłączyć jakiś port nie wyłączając innych.
 
     
sza86

Dołączył: 14 Gru 2011
Posty: 6
Wysłany: Pon Gru 26, 2011 5:27 pm   

Mam jeszcze pytanie.
pobieram stan portów
Kod:

       I2cstart
       I2cwbyte 65
       I2crbyte Pcf8574port , Noack                         '
       I2cstop


zmienna pcf8574port jest tupu Byte i chciałbym mieć dostęp do poszczególnych bitów tego bajtu. Chciałem to załatwić np if pcf8574port.0 = 1 then.... tyle że w tej zmiennej stan portów jest zapisany w postaci dziesiętnej :/ jest jakiś sposób konwersji? Coś jak Printbin(pcf8574port) tyle że to polecenie tylko do wyświetlania na lcd. Można prosić o jakiś przykład?
 
     
piotr94 
Site Admin

Dołączył: 02 Lut 2010
Posty: 606
Skąd: Kraków
Wysłany: Wto Gru 27, 2011 12:52 pm   

Po pierwsze poprawny zapis.
Kod:

I2cstart
       I2cwbyte 65
       I2crbyte Pcf8574port , Nack
       I2cstop

Po drugie instrukcja
Kod:

if pcf8574port.0 = 1 then
(...)

zadziała zgodnie z Twoimi oczekiwaniami - zmienna jest zapisana i tak w postaci binarnej w procesorze, zresztą w większości sytuacji takie szczegóły bascom załatwia sam za Ciebie.
_________________
http://www.piotr94.net21.pl/
 
     
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group