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



Teraz jest 28 mar 2024, o 21:10


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 
Autor Wiadomość
PostNapisane: 31 maja 2020, o 21:20 
Offline
Nowy

Dołączył(a): 26 maja 2020
Posty: 2
Pomógł: 0

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;
}
}
}
}
}



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 cze 2020, o 04:47 
Offline
Nowy

Dołączył(a): 10 cze 2014
Posty: 20
Pomógł: 1

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 cze 2020, o 06:50 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 lis 2019
Posty: 147
Pomógł: 37

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

_________________
Think for yourself and question authority.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 cze 2020, o 09:15 
Offline
Nowy

Dołączył(a): 26 maja 2020
Posty: 2
Pomógł: 0

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 cze 2020, o 14:47 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1960
Lokalizacja: Lipsko
Pomógł: 125

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 :)

_________________
http://www.sylwekkuna.com



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: 5 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 8 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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO