hallo.
ich versuche mit meinem mega32, 2 adc messungen durchzuführen.
eine einfache sieht etwa so aus:
uint16_t adc_mess(void) {
uint16_t messwert=0;
ADMUX |= (0<<REFS1)|(1<<REFS0)|(0<<MUX0);
ADCSRA |= (1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(0<<ADPS0);
for (uint8_t i=0; i<5; i++) {
ADCSRA |= (1<<ADSC);
while ( !(ADCSRA & (1<<ADIF)) )
;
messwert = (ADC)+messwert;
}
return messwert/5;
}
das beispiel funktioniert auch...
warum aber funktioniert dieses code nicht.?
uint16_t adc_mess_1(void) {
uint16_t messwert_1=0;
ADMUX &= ~(1<<MUX1);
ADMUX |= (0<<REFS1)|(1<<REFS0)|(1<<MUX0);
ADCSRA |= (1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(0<<ADPS0)|(1<<ADSC);
for (uint8_t i=0; i<5; i++) {
ADCSRA |= (1<<ADSC);
while ( !(ADCSRA & (1<<ADIF)) )
;
messwert_1 = (ADC)+messwert_1;
}
return messwert_1/5;
}
uint16_t adc_mess_2(void) {
uint16_t messwert_2=0;
ADMUX &= ~(1<<MUX0);
ADMUX |= (0<<REFS1)|(1<<REFS0)|(1<<MUX1);
ADCSRA |= (1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(0<<ADPS0)|(1<<ADSC);
for (uint8_t i=0; i<5; i++) {
ADCSRA |= (1<<ADSC);
while ( !(ADCSRA & (1<<ADIF)) )
;
messwert_2 = (ADC)+messwert_2;
}
return messwert_2/5;
}
------------------------------------------------------------------------
---
------------------------------------------------------------------------
---
kompletter code
------------------------------------------------------------------------
---
------------------------------------------------------------------------
---
#define F_CPU 8000000UL
//#define XTAL 8000000UL
#include <avr/io.h>
#include <stdlib.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include "lcd-routines.h"
uint16_t adc_mess_1(void) {
uint16_t messwert_1=0;
ADMUX &= ~(1<<MUX1);
ADMUX |= (0<<REFS1)|(1<<REFS0)|(1<<MUX0);
ADCSRA |= (1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(0<<ADPS0)|(1<<ADSC);
for (uint8_t i=0; i<5; i++) {
ADCSRA |= (1<<ADSC);
while ( !(ADCSRA & (1<<ADIF)) )
;
messwert_1 = (ADC)+messwert_1;
}
return messwert_1/5;
}
uint16_t adc_mess_2(void) {
uint16_t messwert_2=0;
ADMUX &= ~(1<<MUX0);
ADMUX |= (0<<REFS1)|(1<<REFS0)|(1<<MUX1);
ADCSRA |= (1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(0<<ADPS0)|(1<<ADSC);
for (uint8_t i=0; i<5; i++) {
ADCSRA |= (1<<ADSC);
while ( !(ADCSRA & (1<<ADIF)) )
;
messwert_2 = (ADC)+messwert_2;
}
return messwert_2/5;
}
int main(void)
{
DDRA = 0xff;
uint16_t messung_1 = 0;
uint16_t messung_2 = 0;
char puffer_1[16]; //[16]
char puffer_2[16]; //[16]
lcd_init();
while(1) {
messung_1 = adc_mess_1;
messung_2 = adc_mess_2;
itoa(messung_1 , puffer_1, 10);
itoa(messung_2 , puffer_2, 10);
lcd_setcursor(0,1); lcd_string(puffer_1);
lcd_setcursor(0,2); lcd_string(puffer_2);
}
return 1;
}
ich hoffe es kann mir jmd. helfen.
danke.
mfg.: jo
Fehler beim Funktionsaufruf:
while(1) {
messung_1 = adc_mess_1;
messung_2 = adc_mess_2;
hier fehlen Klammern:
while(1) {
messung_1 = adc_mess_1();
messung_2 = adc_mess_2();
unn wech
B.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.