Sari la conținut
ELFORUM - Forumul electronistilor

Proiect pe CEREBOT 2


Vizitator Tyirean

Postări Recomandate

Vizitator Tyirean

Salut. Am de facut un proiect pe un CEREBOT 2 cu un senszor laser de distanta. Vreau sa fac un mic radar(afisare viteza pe 3 afisoare cu 7 segmente in metrii/secunda).Am atasat schema bloc pentru o intelegere mai buna. Doresc ca odata la 50 ms sa fac o citire din ADC,apoi sa operez cu ultimele 2 valori citite(fac diferenta celor 2,valoarea o inmultesc cu 20 pt a avea o valoare in metrii pe secunda). Vreau sa fac cu o rutina de intrerupere a timerului 0.Am reusit sa fac programul,dar la simularea acestuia in proteus pe portul D am intotdeauna 0,desi portul A functioneaza,se schimba comanda afisoarelor 7 segmente!!! Sunt incepator si nu imi pot da seama care este problema! Va rog ajutati-ma. :nebunrau:

 

/*

 

* AVRGCC3.c

*

* Created: 11/29/2011 12:07:17 PM

* Author: Tyirean

*/

 

#include

#include

#include

 

 

float r,can_val;

float citire_adc(void);

void programare_timer0();

 

 

 

 

void main(void)

{

float new, dif;

int s,z,u,val;

float old=0;

 

programare_timer0();

 

while(1)

{

new=r;

if(new>=old)

dif=new-old; else

dif=old-new;

old=new;

val=dif*20; //valoarea in metrii/secunda

if(val>99.9)

val=99.9;

val=val*100;

val=val % 10;

while(val>100)

{

val=val-100;

s=s+1; // calculul zecilor de m/s

}

while(val>=10)

{

val=val-10;

z=z+1;// calculul unitati de m/s

}

u=val; //zecimi de m/s

 

 

DDRA=0XFF; //setare port a-port intrare

PORTA=0X00; //sterge port A

DDRD=0XFF; //setare port d-port intrare

PORTD=0X00; //sterge port D

DDRA=0XFF; //setare port a-port intrare

PORTA=0X01; //selecteaza primul afisaj 7segmente

DDRD=0XFF; //setare port d-port intrare

PORTD=u; //pune in portul D valoarea zecimilor

DDRA=0XFF; //setare port a-port intrare

PORTA=0X00; //sterge port A

DDRA=0XFF; //setare port a-port intrare

PORTA=0X02; //selecteaza al doilea afisaj 7 segmente

DDRD=0XFF; //setare port d-port intrare

PORTD=0X00; //sterge port D

DDRD=0XFF; //setare port d-port intrare

PORTD=z; //pune in pord D valoarea unitatilor

DDRA=0XFF; //setare port a-port intrare

PORTA=0x00; //sterge port A

DDRA=0XFF; //setare port a-port intrare

PORTA=0x04; //selecteaza al treilea afisaj 7 segmente

DDRD=0XFF; //setare port d-port intrare

PORTD=0X00; //sterge port D

DDRD=0XFF; //setare port d-port intrare

PORTD=s; //pune in port D valoarea zecilor

DDRA=0XFF; //setare port a-port intrare

PORTA=0x00; //sterge port A

}

}

 

void programare_timer0(void)

{

TCCR0=0X0F; //setare mod ctc cu factor divizre 1024

OCR0=0XC2; //incarcare 190 (50ms)

TIMSK=TIMSK | 0X02; //setare intrerupere de comparare

}

 

 

float citire_adc(void)

{

//start conversie

ADMUX=0X40; //setare canal 0

ADCSRA=0X26;

ADCSRB=0x00;

ADCSRA=ADCSRA | 0X80; //MASCA ENABLE

ADCSRA=ADCSRA | 0X40; //MASCA START CONVERSIE

can_val=ADC * 0.9765;

return(can_val);

}

 

 

ISR(TIMER0_COMP_vect)

{

r=citire_adc();

}

Madalina:modificare nume subiect

post-44865-139829346422_thumb.jpg

Link spre comentariu
  • Răspunsuri 3
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • altli

    2

Top autori în acest subiect

Imagini postate

Vizitator Tyirean

Ce ai vrut sa faci aici?val=val*100;val=val % 10; Se pare ca rezultatul va fi mereu 0.

Am facut o prostie. Am vrut sa scot doar rezultatul intreg.Dar mi-am dat seama ca mod da restul unei impartiri nu catul. dar si fara asta nu merge. ?? nu stiu care este problema :)si numarul acela este flotant. pot sa pun pe port asa ceva?
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