Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iom128.h>
- #include <inavr.h>
- #define DV_50Hz 144
- #define DV_1Hz 25
- //Program configuration
- //#define ISR_PROCESSING
- #define PTR_ACCESS
- #define LED_SEG PORTE
- #define LED_SEG_DIR DDRE
- #define LED_DG PORTB
- #define LED_DG_DIR DDRB
- #define DV_480Hz 15
- #define DV_DEMO 40
- #define DV_NEXT 13
- #define DEC_OFF 0x3F
- #define DISP_MAX 6
- #define LED_BLANK 15
- typedef union TRQ {
- //Access to entire byte
- unsigned char c;
- struct {
- unsigned char f_tck : 1;
- //other flags can be defined
- unsigned char not_used : 7;
- };
- } TRQ;
- //Decoding table based on CD4056 -> '0123456789LHPA- '
- __flash unsigned char BCD_2_LED[] = {
- 0xDE, 0x82, 0xEC, 0xE6,
- 0xB2, 0x76, 0x7E, 0xC2,
- 0xFE, 0xF6, 0x1C, 0xBA,
- 0xF8, 0xFA, 0x20, 0x00, 0x5C, 0xF0 };
- __flash unsigned char DEC_1_OF_6[] =
- {0x00, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF};
- //Global variables
- unsigned char freq_dv, symb_ID;
- unsigned char disp[] = {3, 3, 3, 4, 1, 1};
- //unsigned char disp[6] = {0,0,0,0,0,0};
- unsigned char cur_disp;
- unsigned char dv_demo = DV_DEMO;
- unsigned char dv_next = DV_NEXT;
- __no_init unsigned char idx;
- #define UPDATE_DISP_RQ 0x01
- volatile TRQ rq;
- volatile unsigned int wynik;
- void InitDevices()
- {
- LED_DG = 0xFE;
- LED_DG_DIR = 0xFF;
- LED_SEG_DIR = 0xFF;
- //Prescaler fclk / 1024 = 7200Hz
- //Prescaler for T0 is different than for T1,T2,T3
- //OCR0 = DV_480Hz - 1;
- OCR0 = DV_50Hz - 1;
- TCCR0 = (1 << WGM01) | (0 << CS02) | (1 << CS01) | (1 << CS00);
- TCCR1B = (1 << CS12);
- TIMSK = (1 << OCIE0)|(1 << TOIE1);
- //DDRF = 0x00; //PORT F termomentr
- DDRB = 0xFF; //PORT B diode output
- DDRD = 0xFF; //PORT D diode output
- ADCSRA = (1<<ADEN) //ADEN=1 włączenie przetwornika ADC)
- |(0<<ADPS0) // ustawienie preskalera na 64
- |(1<<ADPS1)
- |(1<<ADPS2) | (1 << ADIE);
- ADMUX = (1<<REFS1) | (1<<REFS0); // REFS1:0: wybór napięcia odniesienia ADC
- //na wewnętrzne źródło 2,56V
- //z zewnętrznym kondensatorem na pinie AREF
- __enable_interrupt();
- }
- #pragma vector = TIMER0_COMP_vect
- __interrupt void T0_COMP_ISR()
- {
- //static -> global variabl, visible insied declaration scope (file, function)
- static unsigned char counter = 0;
- if(counter == 2){
- LED_SEG = BCD_2_LED[disp[counter]] | 0x01;
- }
- else{
- LED_SEG = BCD_2_LED[disp[counter]];
- }
- LED_DG = DEC_1_OF_6[counter];
- if (++counter==6) counter=0;
- }
- #pragma vector = TIMER1_OVF_vect
- __interrupt void T1_OVF_ISR()
- {
- ADCSRA |= (1<<ADSC); //rozpocznij konwersje
- }
- #pragma vector = ADC_vect
- __interrupt void ADC_ISR()
- {
- //wynik = ADC;
- wynik = ADC*10;
- wynik = (wynik>>2);
- //PORTB = ~wynik; //wyswietl wartosci adc na diodach
- //PORTD = ~(wynik>>8);
- }
- void int_to_bcd(unsigned int a)
- {
- disp[0] = a/1000;
- disp[1] = a%1000/100;
- disp[2] = a%1000%100/10;
- disp[3] = a%1000%100%10;
- disp[4] = 17;
- disp[5] = 16;
- }
- void main()
- {
- InitDevices();
- while(1)
- {
- int_to_bcd(wynik);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement