PKP98 Postat Ianuarie 29, 2016 Partajează Postat Ianuarie 29, 2016 (editat) Salutare! M-am mai uitat peste acel cod inca odata si nu e cum vreau eu . #include<avr/io.h>#include<util/delay.h> char i;int main(void){DDRB=0b11111111;PORTB=0b00000000; while(1) { for (i=0; i<8;i++) { PORTB=1 <<i; delay_ms(100); } }} Inca o data va spun ce vreau eu sa fac.Deci am 8 led-uri de la 0 la 7 si compilam programul de mai sus . i=0; => led-ul 0 o sa fie aprins,dupa care astept 100ms, dupa asta i=1; =>led-ul 1 o sa fie aprins ,iar led-ul 0 o sa se stinga ,eu nu vreau asta vreau ca led-ul 0 sa stea aprins 100ms ,apoi sa stea stins inca 100ms si abia apoi i=1; si led-ul 1 sa se aprinda,deci vreau ca un led sa stea aprins 100ms ,si stins tot 100ms. Nu asta ar fi codul ,acelasi cod care l-am postat si mai sus: #include<avr/io.h>#include<util/delay.h> char i;int main(void) { DDRB=0b11111111; PORTB=0b00000000; while(1) { for (i=0; i<8;i++) { PORTB=1 <<i; delay_ms(100); PORTB=0 <<i; delay_ms(100); } }} Poate sunt prea insistent ,dar eu asa vad lucrurile . Editat Ianuarie 29, 2016 de PKP98 Link spre comentariu
Liviu M Postat Ianuarie 29, 2016 Partajează Postat Ianuarie 29, 2016 (editat) Cand il faci 0 poti renunta la deplasarea la stanga, ca restul portului e oricum 0: for (i = 0; i < 8;i++) { PORTB = 1 << i; delay_ms(100); PORTB = 0; delay_ms(100); } Editat Ianuarie 29, 2016 de Liviu M Link spre comentariu
PKP98 Postat Ianuarie 29, 2016 Partajează Postat Ianuarie 29, 2016 Da ,e mai bine cu PORTB=0 ,dar am apucat sa scriu asa, pana la urma am dreptate? Link spre comentariu
ratza Postat Ianuarie 29, 2016 Partajează Postat Ianuarie 29, 2016 Ai dreptate, codul va funcţiona exact cum îţi doreşti. Link spre comentariu
PKP98 Postat Ianuarie 29, 2016 Partajează Postat Ianuarie 29, 2016 Multumesc colegului @ratza si @Liviu M pentru raspunsuri . O sa mai vin cu intrebari ,numai bine. Link spre comentariu
PKP98 Postat Februarie 2, 2016 Partajează Postat Februarie 2, 2016 (editat) Salutare! Am mai dat peste ceva ce nu inteleg si anume o functie: void POVDisplay(uint8_t oneByte) { PORTB = oneByte; _delay_ms(2); } Ce inseamna uint8_t? oneByte=0b01010101; Adica poate lua astfel de valori oneByte. Presupun ca uint8_t este un fel de int care suporta acesta valoare 0baaaaaaaa ,dar de unde acel 8 si acel _t, cumva 8=aaaaaaaa,adica 8 biti. Sa inteleg ca asa pot declara un numar de genu 0baaaaaaa,adica uint8_t=0b01010110; Functia in sine stiu ce inseamna ,dar nu stiu ce e cu acel uint8_t?? Multumesc! Editat Februarie 2, 2016 de PKP98 Link spre comentariu
mars01 Postat Februarie 2, 2016 Partajează Postat Februarie 2, 2016 (editat) uint8_t se refera un tip de variabila. La modul simplist am scris despre tipuri (type) intr-un topic in sectiunea PIC. uint8_t este unul din tipurile standard in C si care se gasesc definite in stdint.h (librarie, biblioteca cum vrei sa ii spui ) Disecand uint8_t gasim: - prima litera, 'u' iti arata ca tipul de variabila are prezent modificatorul unsigned, cu alte cuvinte datele stocate in variabila cu tipul uint8_t sunt valori numai pozitive si nu includ numere negative. - urmatoarele litere 'int' iti arata ca in variabila se stocheaza date din multimea numerelor intregi, 'integer' - cifra 8 iti arata pe cati biti este stocata o variabila caracterizata de tipul uint8_t, adica pe 8 biti - caracterele '_t' iti arata ca este vorba de un tip de variabila (type) In cuvinte putine, uint8_t este o prescurtare pentru unsigned char, si care intr-un mod rapid iti ofera multple informatii. Sincer mie mi se pare mult mai intuitiv tipul scris uint8_t decat unsigned char. De fapt in fisierul stdint.h, daca ai curiozitatea sa il deschizi cu un Notepad, ai sa vezi ca se face un: typedef unsigned char uint8_t; Intr-o variabila cu tip uint8_t se pot stoca numere de la 0 la 255 (valoarea maxima posibila stocata pe 8biti) sau daca vrei reprezentare in hexazecimal, se pot stoca numere intre 0x00 si 0xFF, sau in reprezentare binara, se pot stoca numere de la la 0b00000000 pana la 0b11111111. LE: Declaratia unei variabile o faci asa: uint8_t var; iar initializarea o faci: var = 0b00000001;//sauvar = 0x01;//sauvar = 1; Initializarea variabilei se poate face si simultan cu declararea acesteia. Nu are importanta ce reprezentare folosesti atata timp cat intelegi ca valoarea pe care o atribui variabilei declarate cu tipul uint8_t poate fi numai intre 0 si 255 indiferent in ce sistem o reprezinti (binar, octal, hexazecimal, zecimal). Editat Februarie 2, 2016 de mars01 Link spre comentariu
PKP98 Postat Februarie 3, 2016 Partajează Postat Februarie 3, 2016 Buna explicare ,chiar am inteles ,ma gandeam ca acel uint8_t se refera la un tip de variabila ,dar nu stiam ce e cu u ,8,_t acum stiu ,multumesc @mars01. Link spre comentariu
nico_2010 Postat Februarie 4, 2016 Partajează Postat Februarie 4, 2016 Pentru a intelege mai bine tipurile de variabile citeste si asta: http://winavr.scienceprog.com/short-introduction-to-c/variables-in-embedded-c-language.html Link spre comentariu
PKP98 Postat Februarie 6, 2016 Partajează Postat Februarie 6, 2016 (editat) Salutare! Inca nu am facut rost de usbasp si de un atmega,sper ca saptamana asta sa fie cu noroc. Pana una alta am vazut un proiect frumos LED 3X3X3 cube,destul de interesant pentru mine,neavand ce face ,am facut codul pentru acest cub. Asta este: #include<avr/io.h>#include<util/delay.h>int n,delay=100;int main(void){ DDRB=DDRC=0XFF; //PORTB=PORTC=0; while(1){ delay_ms(50); n=1; while(n!=3) { PORTC=PORTB=0xFF; delay_ms(100); PORTC=PORTB=0; delay_ms(100); n++; } n=1; delay_ms(10); while(n!=3) {PORTC |=0b00000011; PORTB |=0b11111111; delay_ms(delay); PORTB=PORTC=0; PORTC |=0b00000101; PORTB |=0b11111111; delay_ms(delay); PORTC=PORTB=0; PORTC |=0b00001001; PORTB |=0b11111111; delay_ms(delay); PORTB=PORTC=0; PORTC |=0b00000101; PORTB |=0b11111111; delay_ms(delay); PORTB=PORTC=0; PORTC |=0b00000011; PORTB |=0b11111111; delay_ms(delay); PORTB=PORTC=0; n++; delay=-25; } n=1; delay=100; delay_ms(10); while(n!=10) {PORTC |=0b00001111; PORTB |=0b00010001; delay_ms(delay); PORTC &=~(0b00000001); PORTB =0b00111000; delay_ms(delay); PORTB =0b01010100; delay_ms(delay); PORTB =0b10010010; delay_ms(delay); PORTC |=0b00001111; PORTB =0b00010001; delay_ms(delay); PORTB=PORTC=0; if(n%3==0) delay=-25; n++; } n=1; delay=100; delay_ms(10); while(n!=10) {PORTC |=0b00000010; PORTB |=0b00000111; delay_ms(delay); PORTC =0b00000100; PORTB |=0b00000111; delay_ms(delay); PORTC =0b00001000; PORTB |=0b00000111; delay_ms(delay); PORTB =0b00111000; delay_ms(delay); PORTB =0b11000000; PORTC =0b00001001; delay_ms(delay); PORTC=0b00000101; PORTB=0b11000000; delay_ms(delay); PORTC=0b00000011; PORTB=0b11000000; delay_ms(delay); PORTC=0b00000010; PORTB=0b00111000; if(n%3==0) delay=-25; n++; } }} Ca sa vad daca am gresit ceva(folosesc winavr) ,am facut Makefile-ul(am setat atmega 8 .usbasp....),iar cand rulez imi apare aceasta eroare ,ceva de delay_ms si inca una. Ce ar putea sa fie? Editat Februarie 6, 2016 de PKP98 Link spre comentariu
PKP98 Postat Februarie 7, 2016 Partajează Postat Februarie 7, 2016 Am rezolvat o eroare cea cu delay,nu pusesem _delay_ms() am scris doar delay_ms(), si inca ceva delay=-25 e gresit ,m-am incurcat era seara ,trebuia delay-=25; . Acum mai am acea eroare ,o fi din cauza ca nu am conectat usbasp-ul la PC? Imi vine sa rad de greselile pe care le-am facut . Link spre comentariu
ratza Postat Februarie 8, 2016 Partajează Postat Februarie 8, 2016 Stai liniştit, chestiile astea li se întîmplă şi celor care scriu cod de ani întregi. Link spre comentariu
nico_2010 Postat Februarie 8, 2016 Partajează Postat Februarie 8, 2016 Nu ar trebui sa mai ai vreo eroare de compilare. Codul corectat. In atasament ai fisierul .hex #include<avr/io.h>#include<util/delay.h>int n,delay=100;int main(void){ DDRB=DDRC=0XFF; //PORTB=PORTC=0; while(1){ _delay_ms(50); n=1; while(n!=3) { PORTC=PORTB=0xFF; _delay_ms(100); PORTC=PORTB=0; _delay_ms(100); n++; } n=1; _delay_ms(10); while(n!=3) {PORTC |=0b00000011; PORTB |=0b11111111; _delay_ms(delay); PORTB=PORTC=0; PORTC |=0b00000101; PORTB |=0b11111111; _delay_ms(delay); PORTC=PORTB=0; PORTC |=0b00001001; PORTB |=0b11111111; _delay_ms(delay); PORTB=PORTC=0; PORTC |=0b00000101; PORTB |=0b11111111; _delay_ms(delay); PORTB=PORTC=0; PORTC |=0b00000011; PORTB |=0b11111111; _delay_ms(delay); PORTB=PORTC=0; n++; delay=-25; } n=1; delay=100; _delay_ms(10); while(n!=10) {PORTC |=0b00001111; PORTB |=0b00010001; _delay_ms(delay); PORTC &=~(0b00000001); PORTB =0b00111000; _delay_ms(delay); PORTB =0b01010100; _delay_ms(delay); PORTB =0b10010010; _delay_ms(delay); PORTC |=0b00001111; PORTB =0b00010001; _delay_ms(delay); PORTB=PORTC=0; if(n%3==0) delay=-25; n++; } n=1; delay=100; _delay_ms(10); while(n!=10) {PORTC |=0b00000010; PORTB |=0b00000111; _delay_ms(delay); PORTC =0b00000100; PORTB |=0b00000111; _delay_ms(delay); PORTC =0b00001000; PORTB |=0b00000111; _delay_ms(delay); PORTB =0b00111000; _delay_ms(delay); PORTB =0b11000000; PORTC =0b00001001; _delay_ms(delay); PORTC=0b00000101; PORTB=0b11000000; _delay_ms(delay); PORTC=0b00000011; PORTB=0b11000000; _delay_ms(delay); PORTC=0b00000010; PORTB=0b00111000; if(n%3==0) delay=-25; n++; } }} main.zip Link spre comentariu
PKP98 Postat Februarie 8, 2016 Partajează Postat Februarie 8, 2016 Si daca va spun ca nu stiu ce sa fac cu acel hex ma credeti? Am vazut si la alte proiecte acel hex ,dar nu stiu ce sa fac cu el. Folosesc Winavr,m-am uitat la niste tutoriale pe net si am vazut ca nu zice nimic de hex,trebuie sa faci un makefile unde setezi portul ,atmega,si usbasp,si-l salvezi intr-un folder impreuna ca programul compilat, asta l-am vazut https://www.youtube.com/watch?v=wfQBS22jxL8 Link spre comentariu
Liviu M Postat Februarie 8, 2016 Partajează Postat Februarie 8, 2016 programul compilatAsta cum arata? Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum