ATNEL tech-forum https://forum.atnel.pl/ |
|
Wąż świetlny linijka LED na 16 pinów ATMEGA32 https://forum.atnel.pl/topic23169.html |
Strona 1 z 1 |
Autor: | dioda2000 [ 31 maja 2020, o 21:20 ] |
Tytuł: | Wąż świetlny linijka LED na 16 pinów ATMEGA32 |
Witam serdecznie wszystkich forumowiczów, zaczynam swoją zabawę z AVR oraz zestawem ATB 1.04a i pomału próbuję się przesiąść z platformy ARDUINO na czysty C i mam może banalne pytanie ale nie mogę sobie poradzić z prostym kodem zapalania diod korzystając z tablicy, otóż wszystko działa pięknie na 8 ledach czyli wpiętych do portu Bxx ATMEGA32 zrobiłem taki prosty efekt linijki (WĄŻ ŚWIETLNY) i wszystko ok natomiast chciałbym podłączyć kolejne diody np. do portu Dxx czyli razem 16 i za nic nie mogę sobie poradzić aby ten wężyk przechodził z portu Bxx do Dxx tak aby porty Bxx i Dxx tworzyły całość, proszę o pomoc. Poniżej znajduje się kod na 8 led jeszcze dla arduino. Pozdrawiam #include <avr/pgmspace.h> const byte przerwa = 100; const byte przerwa2 = 50; byte animacja = 0; uint8_t i, liczba=1; const uint8_t tab[] PROGMEM = { 0b11111110, 0b11111100, 0b11111000, 0b11110000, 0b11100000, 0b11000000, 0b10000000, 0b00000000, 0b00000001, 0b00000011, 0b00000111, 0b00001111, 0b00011111, 0b00111111, 0b01111111, 0b11111111, 0b01111111, 0b00111111, 0b00011111, 0b00001111, 0b00000111, 0b00000011, 0b00000001, 0b00000000, 0b10000000, 0b11000000, 0b11100000, 0b11110000, 0b11111000, 0b11111100, 0b11111110, 0b11111111 }; const uint8_t tab2[] PROGMEM = { 0b11111110, 0b11111100, 0b11111000, 0b11110000, 0b11100000, 0b11000000, 0b10000000, 0b00000000, 0b00000001, 0b00000011, 0b00000111, 0b00001111, 0b00011111, 0b00111111, 0b01111111, 0b11111111, }; unsigned long przejscie = millis(); unsigned long timer = millis(); void setup() { DDRB = 0b11111111; PORTB |= (0b00000000); } void loop() { if ((millis()-przejscie>5000)){ animacja = 1; if((millis()-przejscie>10000)){ przejscie = millis(); animacja = 0; }} switch(animacja){ case 0: if ((millis()-timer>przerwa)){ PORTB = pgm_read_byte ( tab +i ) ; i++; timer = millis(); switch(i){ case 32: i=0; } break; case 1: if ((millis()-timer>przerwa2)){ PORTB = pgm_read_byte ( tab2 +i ) ; i++; timer = millis(); switch(i){ case 32: i=0; break; } } } } } |
Autor: | tprzemko [ 1 cze 2020, o 04:47 ] |
Tytuł: | Re: Wąż świetlny linijka LED na 16 pinów ATMEGA32 |
Witam Najprościej będzie jeszcze dorobić tablicę dla potu D i w okolicach miejsca język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. dodać jeszcze język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. nie zapominając wcześniej o konfiguracji portu d Pozdrawiam |
Autor: | fofex [ 1 cze 2020, o 06:50 ] |
Tytuł: | Re: Wąż świetlny linijka LED na 16 pinów ATMEGA32 |
Autor: | dioda2000 [ 1 cze 2020, o 09:15 ] |
Tytuł: | Re: Wąż świetlny linijka LED na 16 pinów ATMEGA32 |
Super bardzo dziękuje kolego fofex za podpowiedź jakbym mógł poprosić o komentarze do linijek w pętli loop abym mógł zrozumieć działanie programu. Pozdrawiam |
Autor: | SylwekK [ 1 cze 2020, o 14:47 ] |
Tytuł: | Re: Wąż świetlny linijka LED na 16 pinów ATMEGA32 |
16-bitowa tablica z efektami (czyli dane odpowiedzialne za świecenie diod) to jedna rzecz, druga sprawa to proste rozbicie tej pobranej 16b danej i podzielenie jej na dwa bajty, z wykorzystaniem przesunięć bitowych i te dwa bajty w każdym kroku pętli kierujemy na porty B i D. To tylko jeden ze sposobów, bo można to też zrobić zupełnie inaczej jeśli miała by być to tylko biegnąca linijka |
Strona 1 z 1 | Strefa czasowa: UTC + 1 |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |