Guest dobryraul Posted May 17, 2009 Share Posted May 17, 2009 Salut, Am doua programe: unul pentru afisarea pe un display 3x 7segmente cu multiplexare, iar in al doilea am incercat sa fac un ceas(nu este inca bine calibrat, dar nu asta e problema) . Cele doua programe rulate separat merg f bine. Cele 2 prog le-am combinat vrand sa afisez pe display pt inceput secundele. Dupa ce il scriu pe MC, imi afiseaza valoarea 18 pe care am setat-o implicit pt secunde si ramane acolo.... In prog. folosesc 2 timere: timer0 pt multiplexarea displayului si timer2 pt ceas. Problema apare cred la intrerupera generata de timerul2. Folosesc un cuart de 12MHz. Am gresit la ceva? Trebuie sa tin cont de anumite lucruri cand lucrez cu mai multe timere in paralel??? Mai jos este codul: #include <avr/io.h>#include <avr/interrupt.h>#include <util/delay_basic.h>#define SEVEN_SEGMENT_PORT PORTC#define SEVEN_SEGMENT_DDR DDRCvolatile uint8_t digits[3];volatile uint8_t pas;volatile uint16_t HOUR;volatile uint16_t MINUTE;volatile uint16_t SECOND; void Time_update(void){ if(SECOND > 59) { SECOND = 0; MINUTE++; if(MINUTE > 59) { MINUTE = 0; HOUR++; if(HOUR > 23) { HOUR = 0; MINUTE = 0; SECOND = 0; } } }}void SevenSegment(uint8_t n,uint8_t dp){ if(n<10) { switch (n) { case 0:SEVEN_SEGMENT_PORT=0b00000011;break; case 1:SEVEN_SEGMENT_PORT=0b10011111;break; case 2:SEVEN_SEGMENT_PORT=0b00100101;break; case 3:SEVEN_SEGMENT_PORT=0b00001101;break; case 4:SEVEN_SEGMENT_PORT=0b10011001;break; case 5:SEVEN_SEGMENT_PORT=0b01001001;break; case 6:SEVEN_SEGMENT_PORT=0b01000001;break; case 7:SEVEN_SEGMENT_PORT=0b00011111;break; case 8:SEVEN_SEGMENT_PORT=0b00000001;break; case 9:SEVEN_SEGMENT_PORT=0b00001001;break; } if(dp) { SEVEN_SEGMENT_PORT&=0b11111110; } } else { SEVEN_SEGMENT_PORT=0b11111101; }}void Wait(){ uint8_t i; for(i=0;i<46;i++) { _delay_loop_2(0); }}void Print(uint16_t num){ uint8_t i=0; uint8_t j, p0; if(num>999) return; while(num) { digits[i]=num%10; i++; num=num/10; } for(j=i;j<3;j++) digits[j]=0;p0=digits[0];digits[0]=digits[1];digits[1]=p0;}//******* MAIN****************//void main(void){ //initializari timer 7segmente; TCCR0|=(1<<CS02);//|(1<<CS00);// Prescaler = FCPU/256 TIMSK|=(1<<TOIE0); //Enable Overflow Interrupt Enable TCNT0=0; //Initialize Counter DDRD|=0b11100000; PORTD=0b11000000; SEVEN_SEGMENT_DDR=0XFF; //Port C SEVEN_SEGMENT_PORT=0XFF;//initializari timer pt ceas; pas=0; TCCR2|=(1<<CS22)|(1<<CS21)|(1<<CS20);//1024 prescaler TIMSK|=(1<<TOIE0); TCNT2=0; HOUR = 8; MINUTE = 2; SECOND = 18; sei(); //Enable Global Interrupts while(1) { Time_update(); Print(SECOND); Wait(); }}ISR(TIMER0_OVF_vect) //multiplexare display{static uint8_t i=0;SevenSegment(digits[i],0); if(i==2) { i=0; } else { i++; } PORTD=~(1<<(5+i)); SevenSegment(digits[i],0); }ISR(TIMER2_OVF_vect) // incrementare secunde{pas++;if (pas>=2) // nu este calibrat pt a genera 1 secunda { SECOND++; pas=0; }} Link to comment
Guest dobryraul Posted May 19, 2009 Share Posted May 19, 2009 Am rezolvat ....era o greseala de tip copy/paste.pt cel de-al doilea timer am scris: TIMSK|=(1< Link to comment
Guest synco Posted November 25, 2009 Share Posted November 25, 2009 in afara de pony prog cu ce mai pot programa un avr de genul asta?mi-am descarcat ultima versiune de la pony prog si nu am in lista 32-ul Link to comment
nana Posted November 25, 2009 Share Posted November 25, 2009 Pai mai sunt avr isp sau te mai miri ce programe sau poti sa folosesti direct programatorul din softul de dezvoltare daca este compatibil eu am de exemplu in avr ISPmkII care il folosesc direct din avrstudio si asa evit o multitudine de erori de programare ... inclusiv cele de fusebiti. Setez totul software. Link to comment
godFather89 Posted November 29, 2009 Share Posted November 29, 2009 in afara de pony prog cu ce mai pot programa un avr de genul asta?mi-am descarcat ultima versiune de la pony prog si nu am in lista 32-ulce 32? nu era vorba de mega16? Este sigur in lista la avr micro/m16 (ceva de genul). Nu mai folosesc demult pony prog... Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now