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

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


dodać jeszcze

Składnia: [ Pobierz ] [ Ukryj ]
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

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

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/