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 5226 sterownik kod w Bascomie lub C

man8150
-
-
Posty:9
Rejestracja:5 lip 2010, o 15:32
Lokalizacja:warszawa
Avt 5226 sterownik kod w Bascomie lub C

Postautor: man8150 » 5 lip 2010, o 15:45

Witam

Jestem nowy na forum i właśnie zakupiłem sobie kit avt 5226 ale niestety ni mogę rozgryżć sposobu jego sterowania jak narażię napisałem taki kod w bascomie ale jest on pewnie źle.

Kod: Zaznacz cały

$regfile = "attiny2313.dat" $crystal = 8000000 Dim A As Byte Config Scl = Portb.0 Config Sda = Portb.1 I2cinit A = 16 ' tu jest problem Do I2cstart I2cwbyte A I2cwbyte 00000000 I2cwbyte 11111111 I2cwbyte 00000000 I2cwbyte 11111111 I2cwbyte 00000000 I2cwbyte 11111111 I2cwbyte 00000000 I2cwbyte 11111111 I2cstop Loop
Mam do was dwa pytanie
1. W projekcie moduły mają adresy 0x10,0x20,0x30 itd do 0x60 i nie zabardzo wiem jak będzie on wyglądał w bascomie
2.W artykule piszę też że początek znaku w tablicy generatora znaków to kod ASCII pomnożony przez 6 czyli 2 albo 3 liczby a tam potrzeba 5 liczb + 1 do przerwy jakie są te następne liczby

Zmiana napisałem program który wyświetla mi migającą strałkę ale jak teraz wyświetlić znaki za pomocą kodu ascii

Kod: Zaznacz cały

$regfile = "attiny2313.dat" $crystal = 8000000 Dim A As Byte Config Scl = Portb.0 Config Sda = Portb.1 I2cinit A = 16 Do I2cstart I2cwbyte A I2cwbyte 00010000 I2cwbyte 10100000 I2cwbyte 01000000 I2cwbyte 10010111 I2cwbyte 10010111 I2cwbyte 01000000 I2cwbyte 10100000 I2cwbyte 00010000 I2cstop Waitms 5 I2cstart I2cwbyte A I2cwbyte 00000000 I2cwbyte 00000000 I2cwbyte 00000000 I2cwbyte 00000000 I2cwbyte 00000000 I2cwbyte 00000000 I2cwbyte 00000000 I2cwbyte 00000000 I2cstop Waitms 5 Loop

Awatar użytkownika
pajaczek
Moderator
Moderator
Posty:2653
Rejestracja:24 sty 2005, o 00:39
Lokalizacja:Winny gród

Postautor: pajaczek » 5 lip 2010, o 21:00

A jakiż to problem jest w zaznaczonym miejscu?? Bo jakoś nie napisałeś.

A co do kodu ASCII nie zrozumiałeś (a ja przy okazji nie bardzo wiem co masz na myśli z tymi 2 lub 3 liczbami ;) ). Tablica generatora znaków zawiera opis kolejnych znaków ASCII. Numer ASCII pomnożony przez 6 określa indeks pierwszego bajtu opisującego ten znak, musisz wysłać kolejne 6 bajtów poczynając od tego znajdującego się pod adresem ASCII*6. Przykładowo do wyświetlenia litery A (kod ASCII 65) musisz pomnożyć kod przez 6 -> 65*6 = 390, i poczynając od tego bajta wysłać kolejne 6, czyli 390, 391, 392, 393, 394 i 395

Ps. Zajrzyj sobie TUTAJ, zainteresuj się zwłaszcza do zakładką "BASCOM HARDWARE/Using the I2C protocol"

man8150
-
-
Posty:9
Rejestracja:5 lip 2010, o 15:32
Lokalizacja:warszawa

Postautor: man8150 » 6 lip 2010, o 09:27

No niestety nie chodzi tak jak ty powiedziałeś a za tą stronę dzieki

Awatar użytkownika
pajaczek
Moderator
Moderator
Posty:2653
Rejestracja:24 sty 2005, o 00:39
Lokalizacja:Winny gród

Postautor: pajaczek » 6 lip 2010, o 12:39

Ale co nie chodzi?? Opisuj trochę dokładniej... co zrobiłeś itd, bo tak to ciężko będzie Ci pomóc.

man8150
-
-
Posty:9
Rejestracja:5 lip 2010, o 15:32
Lokalizacja:warszawa

Postautor: man8150 » 6 lip 2010, o 14:03

Napisalem taki kod

Kod: Zaznacz cały

$regfile = "attiny2313.dat" $crystal = 8000000 Dim A As Byte Dim B As Word Dim C As Byte Dim D As Byte Dim E As Byte Dim F As Byte Dim G As Byte Dim H As Byte Dim I As Byte Config Scl = Portb.0 Config Sda = Portb.1 Config Portd.7 = Input Portd.7 = 1 I2cinit A = 16 I2cstart I2cwbyte A I2cwbyte 390 I2cwbyte 391 I2cwbyte 392 I2cwbyte 393 I2cwbyte 394 I2cwbyte 395 I2cwbyte 0 I2cwbyte 0 i2cstop
I zamiast litery A wyświetla się to co na pierwszym zdjęciu
A żeby wyświetlić prawdziwe A to napisałem coś takiego

Kod: Zaznacz cały

$regfile = "attiny2313.dat" $crystal = 8000000 Dim A As Byte Dim B As Word Dim C As Byte Dim D As Byte Dim E As Byte Dim F As Byte Dim G As Byte Dim H As Byte Dim I As Byte Config Scl = Portb.0 Config Sda = Portb.1 Config Portd.7 = Input Portd.7 = 1 I2cinit A = 16 I2cstart I2cwbyte A I2cwbyte 0 I2cwbyte 63 I2cwbyte 68 I2cwbyte 68 I2cwbyte 68 I2cwbyte 63 I2cwbyte 0 I2cwbyte 0 I2cstop
Jeżeli wiesz jak by można ten mój sposób zoptymalizować to był bym wdzięczny jeżeli nie to kod niestety zajmie kilka stron A4,a no i oco chodzi z tym ascii coś robię nie tak.Poniżej zdjęcia po lewej z kodem ascii po prawej mój sposób, a trzecie to widok od strony lutowania.

Obrazek Obrazek Obrazek

Awatar użytkownika
pajaczek
Moderator
Moderator
Posty:2653
Rejestracja:24 sty 2005, o 00:39
Lokalizacja:Winny gród

Postautor: pajaczek » 6 lip 2010, o 14:47

Mamusiu trzymaj mnie bo mnie poniesie...

Wiesz co to jest tablica w języku programowania??

Przykładowo (a wiesz co, wysilę się i podam przykład nawet w bascomie, ale żeby nie przesadzać z tym wysiłkiem jest to przykład przeklejony z wyżej wzmiankowanego helpa):

Kod: Zaznacz cały

'create an array named a, with 10 elements (1 to 10) Dim A(10) As Byte 'create an integer Dim C As Integer 'now fill the array For C = 1 To 10 'assign array element A(c)= C ' print it Print A(c) Next 'you can add an offset to the index too C = 0 A(c + 1)= 100 Print A(c + 1) End
Jak widać mamy tu tablicę o nazwie A, składającą się (zawierającą) z 10 elementów typu Byte. Do elementów tablicy możemy odwołać się przez A(INDEX) gdzie INDEX jest numerem kolejnego elementu. I właśnie poprzednio podałem Ci sposób wyliczenia tych indeksów, 390-395 to są indeksy kolejnych elementów z tablicy generatora znaków, a nie ostateczne wartości które miałeś wysłać. Musisz odczytać te 6 bajtów, o takich indeksach z tablicy i dopiero te wartości wysłać przez i2c !!!!

Btw. wartości 390 itd wykraczają poza zakres Byte [0...255], jak więc wyobrażałeś sobie że wyślesz je przez i2cwbyte jako bajt??

W Twoim wypadku musiało by to być coś a'la (podaję jednie odpowiedni fragment kodu

Kod: Zaznacz cały

Dim Offset As Integer Offset = 65 * 6 ; to będzie właśnie równe 390 I2cstart I2cwbyte A I2cwbyte Generator(Offset) ; element 390' ty, a nie wartość 390 I2cwbyte Generator(Offset + 1) ; element 391'szy a nie wartość 391 I2cwbyte Generator(Offset + 2) ; itd I2cwbyte Generator(Offset + 3) I2cwbyte Generator(Offset + 4) I2cwbyte Generator(Offset + 5) i2cstop
Ps. do tego kodu. Zapewne przy wyliczanu wartości "Offset" należało by dodać jeszcze wartość 1, a więc Offset=(65*6)+1, a to ze względu na fakt, że bascom indeksuje tablice od 1, a nie od 0, ale być może po prostu znak ASCII o numerze 0 jest obicęty do 5 (co nie ma właściwie wpływu, bo jest to i tak znak niewyświetlalny).

Sam sposób obsługi generatora pozostawiam już Tobie, nie chce mi się już szukać tego artykułu by doczytać jakiż to generator jest tam użyty. Zapewne jest to jakiś plik z predefiniowanymi znakami (w formie tablicy), załączany przez $INCLUDE bądź $INC, po prostu ktoś te kilka stron A4 napisał za Ciebie ;) (a dokładniej to pewnie posłużył się jakimś własnym skryptem ;) bo komu by się chciało tyle pisać).
I nie przeklejaj tego co powyżej na pałę, bo wyrzuci Ci pewnie że nie wie co to jest Generator, sprawdź najpierw dokładnie co o tym generatorze piszą w artykule i jak się naprawdę nazywa. Ja użyłem jedynie nazwy symbolicznej dla mojego przykładu.

man8150
-
-
Posty:9
Rejestracja:5 lip 2010, o 15:32
Lokalizacja:warszawa

Postautor: man8150 » 6 lip 2010, o 15:49

Znalazłem plik "my6_8.font" wpisałem
$include "my6_8.font"
A jak zastąpić teraz słowo generator jakąż zmienną czy co.
Pewnie myślisz że chce gotowca NIE tylko muszę wykonać tę tablice na czwartek.

Awatar użytkownika
pajaczek
Moderator
Moderator
Posty:2653
Rejestracja:24 sty 2005, o 00:39
Lokalizacja:Winny gród

Postautor: pajaczek » 6 lip 2010, o 18:26

tablicę ;)

A zajrzałeś do tego pliku??

Podaj choć gdzie znalazłeś ten plik, bo wujek nie podaje skąd można go pobrać. A może nie uwierzysz, ale ja nawet nie mam bascoma ;)

Dodano:
Wiesz co, zajrzałem z ciekawości do tego artykułu, na podstawie którego powstał kit. Tam przykłady nie są pisane w bascomie tylko w C, oraz nie użyto do sterowania AVR'ka tylko PIC'a. Niemniej reszta zgadza się z tym co pisałeś, a więc częściowo wyciągałeś dobre wnioski (choć czasem źle je interpretowałeś ;) ). Zajrzyj do tego pliku my6_8 i opisz co tam znalazłeś, albo podaj źródło tak by można było się temu przyjrzeć.
Ostatnio zmieniony 6 lip 2010, o 18:41 przez pajaczek, łącznie zmieniany 1 raz.

man8150
-
-
Posty:9
Rejestracja:5 lip 2010, o 15:32
Lokalizacja:warszawa

Postautor: man8150 » 6 lip 2010, o 18:33

Plik znalazłem w samplach bascoma
tak on wygląda

Kod: Zaznacz cały

My6_8: $asm .db 1,6,6,0 .db 0,0,0,0,0,0 ; .db 0,0,0,95,0,0 ; ! .db 0,3,7,0,3,7 ; " .db 0,36,126,36,126,36 ; # .db 0,36,43,106,18,0 ; $ .db 0,99,19,8,100,99 ; % .db 0,54,73,86,32,80 ; & .db 0,0,3,7,0,0 ; ' .db 0,0,62,65,0,0 .db 0,0,65,62,0,0 .db 0,8,62,28,62,8 ; * .db 0,8,8,62,8,8 ; + .db 0,0,96,224,0,0 ; , .db 0,8,8,8,8,8 ; - .db 0,0,0,96,96,0 ; . .db 0,32,16,8,4,2 ; / .db 0,62,81,73,69,62 ; 0 .db 0,0,66,127,64,0 ; 1 .db 0,98,81,73,73,70 ; 2 .db 0,34,73,73,73,54 ; 3 .db 0,24,20,18,127,16 ; 4 .db 0,47,73,73,73,49 ; 5 .db 0,60,74,73,73,48 ; 6 .db 0,1,113,9,5,3 ; 7 .db 0,54,73,73,73,54 ; 8 .db 0,6,73,73,41,30 ; 9 .db 0,0,0,108,108,0 ; : .db 0,0,0,108,236,0 ; ; .db 0,8,20,34,65,0 ; < .db 0,36,36,36,36,36 ; = .db 0,0,65,34,20,8 ; > .db 0,2,1,89,9,6 ; ? .db 0,62,65,93,85,30 ; @ .db 0,126,17,17,17,126 ; A .db 0,127,73,73,73,54 ; B .db 0,62,65,65,65,34 ; C .db 0,127,65,65,65,62 ; D .db 0,127,73,73,73,65 ; E .db 0,127,9,9,9,1 ; F .db 0,62,65,73,73,122 ; G .db 0,127,8,8,8,127 ; H .db 0,0,65,127,65,0 ; I .db 0,48,64,64,64,63 ; J .db 0,127,8,20,34,65 ; K .db 0,127,64,64,64,64 ; L .db 0,127,2,4,2,127 ; M .db 0,127,2,4,8,127 ; N .db 0,62,65,65,65,62 ; O .db 0,127,9,9,9,6 ; P .db 0,62,65,81,33,94 ; Q .db 0,127,9,9,25,102 ; R .db 0,38,73,73,73,50 ; S .db 0,1,1,127,1,1 ; T .db 0,63,64,64,64,63 ; U .db 0,31,32,64,32,31 ; V .db 0,63,64,60,64,63 ; W .db 0,99,20,8,20,99 ; X .db 0,7,8,112,8,7 ; Y .db 0,113,73,69,67,0 ; Z .db 0,0,127,65,65,0 ; [ .db 0,2,4,8,16,32 ; \ .db 0,0,65,65,127,0 ; ] .db 0,4,2,1,2,4 ; ^ .db 128,128,128,128,128,128 .db 0,0,3,7,0,0 ; ` .db 0,32,84,84,84,120 ; a .db 0,127,68,68,68,56 ; b .db 0,56,68,68,68,40 ; c .db 0,56,68,68,68,127 ; d .db 0,56,84,84,84,8 ; e .db 0,8,126,9,9,0 ; f .db 0,24,164,164,164,124 ; g .db 0,127,4,4,120,0 ; h .db 0,0,0,125,64,0 ; i .db 0,64,128,132,125,0 ; j .db 0,127,16,40,68,0 ; k .db 0,0,0,127,64,0 ; l .db 0,124,4,24,4,120 ; m .db 0,124,4,4,120,0 ; n .db 0,56,68,68,68,56 ; o .db 0,252,68,68,68,56 ; p .db 0,56,68,68,68,252 ; q .db 0,68,120,68,4,8 ; r .db 0,8,84,84,84,32 ; s .db 0,4,62,68,36,0 ; t .db 0,60,64,32,124,0 ; u .db 0,28,32,64,32,28 ; v .db 0,60,96,48,96,60 ; w .db 0,108,16,16,108,0 ; x .db 0,156,160,96,60,0 ; y .db 0,100,84,84,76,0 ; z .db 0,8,62,65,65,0 ; { .db 0,0,0,119,0,0 ; | .db 0,0,65,65,62,8 ; } .db 0,2,1,2,1,0 ; ~ .db 0,0,0,0,0,0 ; &#127; $end asm
Tylko jeszcze nie wiem czym zastąpić wyraz generator

Awatar użytkownika
pajaczek
Moderator
Moderator
Posty:2653
Rejestracja:24 sty 2005, o 00:39
Lokalizacja:Winny gród

Postautor: pajaczek » 6 lip 2010, o 18:51

My6_8 = Generator

Example:
My6_8(Offset)

Btw. To jest tzw. wstawka Asemblerowa ;)

man8150
-
-
Posty:9
Rejestracja:5 lip 2010, o 15:32
Lokalizacja:warszawa

Postautor: man8150 » 6 lip 2010, o 19:03

Chyba się podam tera bascom wywala błędy

Awatar użytkownika
pajaczek
Moderator
Moderator
Posty:2653
Rejestracja:24 sty 2005, o 00:39
Lokalizacja:Winny gród

Postautor: pajaczek » 6 lip 2010, o 19:04

Pokaż jakie błędy.

A najlepiej zajrzyj sobie do tych sampli gdzie znalazłeś wstawkę i przeanalizuj.

Domyślam się co jest nie tak, ale nie chcę podawać wszystkiego na tacy :630:

man8150
-
-
Posty:9
Rejestracja:5 lip 2010, o 15:32
Lokalizacja:warszawa

Postautor: man8150 » 6 lip 2010, o 19:15

według polskiej instrukcji
My6_8 = Generator wywala że ma błędne przypisanie
A My6_8(offset) nieznana instrukcja
teraz kod wygląda tak

Kod: Zaznacz cały

$regfile = "attiny2313.dat" $crystal = 8000000 $include "my6_8.font" Dim A As Byte Dim B As Byte Dim Offset As Integer Dim Znak As Byte Config Scl = Portb.0 Config Sda = Portb.1 I2cinit A = 16 My6_8 = Generator Example: My6_8(offset) Offset = 65 * 6 ' to będzie właśnie równe 390 I2cstart I2cwbyte A I2cwbyte Generator(offset) ' Element 390 ' ty, a nie wartość 390 I2cwbyte Generator(offset + 1) ' element 391'szy a nie wartość 391 I2cwbyte Generator(offset + 2) ' itd I2cwbyte Generator(Offset + 3) I2cwbyte Generator(Offset + 4) I2cwbyte Generator(Offset + 5) I2cstop My6_8 = Generator Example: My6_8(offset)

Awatar użytkownika
pajaczek
Moderator
Moderator
Posty:2653
Rejestracja:24 sty 2005, o 00:39
Lokalizacja:Winny gród

Postautor: pajaczek » 6 lip 2010, o 19:53

Luuudzie... myśleć, myśleć i myśleć. Nie przepisywać.
My6_8 = Generator wywala że ma błędne przypisanie
Oczywiście że wywala. To było określenie, że Generator w tamtym zapisie to My6_8 nowym. Jedno zastępuje drugie. A nie gotowy kod do przepisania.
A My6_8(offset) nieznana instrukcja
I prawidłowo... musisz sobie wcześniej w bascomie zadeklarować tą zmienną. To właśnie miałem na myśli pisząc że nie podam wszystkiego na tacy... poeksperymentuj. Do czwartku masz jeszcze trochę czasu ;)

Zajrzyj do tych sampli, które znalazłeś, poszukaj, poczytaj...

man8150
-
-
Posty:9
Rejestracja:5 lip 2010, o 15:32
Lokalizacja:warszawa

Postautor: man8150 » 6 lip 2010, o 20:51

Po zmianach wybija taki błąd w liniach

Kod: Zaznacz cały

I2cwbyte My6_8(offset) ' Element 390 ' ty, a nie I2cwbyte My6_8(offset + 1) ' element 391'szy a nie wartość 391 I2cwbyte My6_8(offset + 2) ' itd I2cwbyte My6_8(offset + 3) I2cwbyte My6_8(offset + 4) I2cwbyte My6_8(offset + 5)
Ta zmienna nie jest zmienną tablicową
poniżej cały kod

Kod: Zaznacz cały

$regfile = "attiny2313.dat" $crystal = 8000000 $include "my6_8.font" Dim A As Byte Dim My6_8(offset) As Long Dim Offset As Integer Dim Znak As Byte Config Scl = Portb.0 Config Sda = Portb.1 I2cinit A = 16 Offset = 65 * 6 ' to będzie właśnie równe 390 I2cstart I2cwbyte A I2cwbyte My6_8(offset) ' Element 390 ' ty, a nie wartość 390 I2cwbyte My6_8(offset + 1) ' element 391'szy a nie wartość 391 I2cwbyte My6_8(offset + 2) ' itd I2cwbyte My6_8(offset + 3) I2cwbyte My6_8(offset + 4) I2cwbyte My6_8(offset + 5) I2cstop
Co byś chciał za napisanie kodu do wyświetlenia LITERY A to se już poradzę bo jak narażię się tylko z tym męczę a do czwartku muszę polutować jeszcze 6 takich modułów,wytrawić płytkę do sterownika i wszystko zmontować.

Pozdrawiam

Awatar użytkownika
pajaczek
Moderator
Moderator
Posty:2653
Rejestracja:24 sty 2005, o 00:39
Lokalizacja:Winny gród

Postautor: pajaczek » 6 lip 2010, o 22:55

No dobrze... przyjrzałem się bliżej temu, i wygląda że faktycznie nie da się do tej tablicy tak łatwo dobrać, niemniej myślę że jest to możliwe, by wykorzystać tą tablicę.

Tablica jak widzę pochodzi z generatora znaków Bascoma. Niestety dla Ciebie, jedyne przykłady jakie znalazłem do użycia jej służą wyświetleniu znaków na LCD za pomocą bibliotek bascoma, nie widziałem jednak takiej do obsługi lcd po i2c ;) I szczerze nie interesowało mnie to.

man8150
-
-
Posty:9
Rejestracja:5 lip 2010, o 15:32
Lokalizacja:warszawa

Postautor: man8150 » 7 lip 2010, o 14:32

Po 4h studiowania helpa od bascoma,i innego kodu do innej tablicy z diodami bez transmisji doszłęm jak ma być jak narażie znaki wyświetlają się w odbiciu lustrzanym ale to już nie problem.
Poniżej kod:

Kod: Zaznacz cały

$regfile = "attiny2313.dat" $crystal = 8000000 $include "my6_8.font" Dim A As Byte Dim B As Byte Dim C As Byte Dim D As Byte Dim E As Byte Dim F As Byte Dim G As Byte Dim Linia As Byte Dim My6_8 As Long Dim Offset As Byte Dim Znak As Byte Config Scl = Portb.0 Config Sda = Portb.1 I2cinit A = 16 Offset = 0 Do Waitms 50 B = Lookup(offset , My6_8) Offset = Offset + 1 C = Lookup(offset , My6_8) Offset = Offset + 1 D = Lookup(offset , My6_8) Offset = Offset + 1 E = Lookup(offset , My6_8) Offset = Offset + 1 F = Lookup(offset , My6_8) Offset = Offset + 1 G = Lookup(offset , My6_8) I2cstart I2cwbyte A I2cwbyte B I2cwbyte C I2cwbyte D I2cwbyte E I2cwbyte F I2cwbyte G I2cstop Waitms 50 Offset = Offset + 1 Loop Until Offset = 246

Wróć do „Kity AVT”

Kto jest online

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