Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**********************************************************
- Project : adc_pollaus.c
- Hardware: PV-M32 + PV-EMO
- Date : 11.11.2007
- Author : pva
- Comments: mittaa ADC3-inputtiin liitetyn potentiometrin liulla olevaa jännitettä, ja tulostaa sen (A-porttiin kytkettyyn)
- LCD-näyttöön Potikka GND ja +5V välillä. Kytke 10 k potentiometrin liuku n.100kohmin vastuksen kautta ADC3-inputtiin.
- EMOn ADC1 = ADC3 ==>> korjattu. Säädä potikan liun jännitettä ja resetoi aina välillä.
- Jotta DVM näyttää oikein, pidä reset-nappia alhaalla mittauksen ajan.
- *********************************************************/
- #include "defines.h"
- #include <ctype.h>
- #include <stdint.h>
- #include <stdio.h>
- #include <avr/io.h>
- #include <avr/pgmspace.h>
- #include <util/delay.h>
- #include "lcd_tat.h"
- #include "lcd_tat.c"
- #include "uart.h"
- #include "uart.c"
- static void
- ioinit(void) {
- uart_init();
- }
- FILE uart_str = FDEV_SETUP_STREAM(uart_putchar, uart_getchar, _FDEV_SETUP_RW);
- //FILE lcd_str = FDEV_SETUP_STREAM(lcd_putchar, NULL, _FDEV_SETUP_WRITE);
- static void delay_1s(void) {
- uint8_t i;
- for (i = 0; i < 100; i++)
- _delay_ms(10);
- }
- // *** Primitive wait() ***
- void wait(uint16_t time)
- {
- volatile uint16_t i;
- for(i=0;i<2000;i++)
- _delay_loop_2(time);
- }
- void Tulosta(void)
- {
- int i=0;
- uint8_t voltti;
- uint32_t adc_data;
- uint32_t abc;
- abc=ADCW;
- adc_data = ADCW; // luetaan muunnostulos muuttujaan
- adc_data = (adc_data * 5000)/1023;
- // skaalataan muunnostulos 'volteiksi'
- voltti = 0x30 + (adc_data/1000 % 10); // laskee voltit
- LCD_WriteChar(voltti); // tulostaa voltit
- LCD_WriteChar(0x2C); // tulostaa pilkun
- voltti = 0x30 + (adc_data/100 % 10); // 'sadat mV'
- LCD_WriteChar(voltti);
- voltti = 0x30 + (adc_data % 10); // 'kymmenet mV'
- LCD_WriteChar(voltti);
- LCD_WriteChar('V');
- LCD_SetCursorXY(0, 1);
- LCD_WriteINT(abc);
- wait(50);
- LCD_Clear();
- }
- void ADC_init(void)
- {
- ADCSRA = (1<< ADEN) ; // ADC käyttöön
- ADMUX |= (1<<MUX1) | (1<<MUX0); // valitaan ADC3
- ADMUX |= 1 << REFS0;
- // Uref = AVcc ja 0,1 uF kerko oltava Vref-pinnissä
- ADCSRA |= (1<<ADPS2) | (1<<ADPS0); // clk/32, 125 kHz
- ADCSRA |= (1<<ADSC); // aloita muunnos
- }
- int main(void)
- { ADC_init();
- ioinit();
- stdout = stdin = &uart_str;
- stderr = stdin = &uart_str;
- fprintf(stdout, "Hello world!\n");
- int i=0;
- uint8_t voltti;
- uint32_t adc_data;
- uint32_t abc;
- abc=ADCW;
- adc_data = ADCW; // luetaan muunnostulos muuttujaan
- adc_data = (adc_data * 5000)/1023;
- // skaalataan muunnostulos 'volteiksi'
- voltti = 0x30 + (adc_data/1000 % 10); // laskee voltit
- // tulostaa voltit
- fprintf(stdout,"%c", voltti);
- fprintf(stdout, "V\n");
- wait(50);
- //fprintf(stderr, "Hello world!\n");
- // printf("LO");
- DDRC |= 1<<0;
- PORTC |= 1<<0; // taustavalo
- LCD_init(1, 0, 0);
- ADC_init();
- DDRA &= ~(1<<3); // jännitteen lukupinni "sisään"
- // LCD-initin konfiguroinnin "korjaus"
- while(1)
- {
- // eka mittaus, joka hylätään
- // koska se on epätarkka
- loop_until_bit_is_set(ADCSRA, ADIF);
- // muunnos_valmis pollaus
- ADCSRA |= (1<<ADIF) ; // nollaa lippu
- ADCSRA |= (1 << ADSC);
- // aloita uusi muunnos, eka hylätään
- loop_until_bit_is_set(ADCSRA, ADIF);
- Tulosta();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement