Sari la conținut
ELFORUM - Forumul electronistilor

Programarea uC-urilor Atmel


Postări Recomandate

Salutare!

M-am mai uitat peste acel cod inca odata si nu e cum vreau eu  :rade:

#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 :rade: .

Editat de PKP98
Link spre comentariu

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 de PKP98
Link spre comentariu

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 de mars01
Link spre comentariu

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.

post-245415-0-16312800-1454788825_thumb.png

Ce ar putea sa fie?

Editat de PKP98
Link spre comentariu

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; :rade: .

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 :rade: .

Link spre comentariu

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

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

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 cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum
×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări