hier meine lösung bei nem ATmega16 auf dem evaluation-board plus addon-board und RFM12 von pollin
zu der ich aber noch fragen hab ^^
Code:
#include <avr/io.h>
#include <avr/iom16.h>
#include <inttypes.h>
uint16_t ReadChannel(uint8_t mux)
{
uint8_t i;
uint16_t result;
ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS0); // Frequenzvorteiler
// setzen auf 8 (1) und ADC aktivieren (1)
ADMUX = mux; // Kanal waehlen
ADMUX |= (1<<REFS1) | (1<<REFS0); // interne Referenzspannung nutzen
/* nach Aktivieren des ADC wird ein "Dummy-Readout" empfohlen, man liest
also einen Wert und verwirft diesen, um den ADC "warmlaufen zu lassen" */
ADCSRA |= (1<<ADSC); // eine ADC-Wandlung
while ( ADCSRA & (1<<ADSC) )
{
; // auf Abschluss der Konvertierung warten
}
result = ADCW; // ADCW muss einmal gelesen werden,
// sonst wird Ergebnis der nächsten Wandlung
// nicht übernommen.
/* Eigentliche Messung - Mittelwert aus 4 aufeinanderfolgenden Wandlungen */
result = 0;
for( i=0; i<4; i++ )
{
ADCSRA |= (1<<ADSC); // eine Wandlung "single conversion"
while ( ADCSRA & (1<<ADSC) )
{
; // auf Abschluss der Konvertierung warten
}
result += ADCW; // Wandlungsergebnisse aufaddieren
}
ADCSRA &= ~(1<<ADEN); // ADC deaktivieren (2)
result /= 4; // Summe durch vier teilen = arithm. Mittelwert
return result;
}
void ShowByte(uint16_t wert)
{
PORTC = wert;
}
int main (void)
{
DDRC = 0;
PORTC = 0;
uint16_t adcval = 0;
while(1)
{
adcval = ReadChannel(0); /* MUX-Bits auf 0b0000 -> Channel 0 */
ShowByte(adcval);
}
return 0;
}
meine frage dazu
also am portC hab ich 8 leds dran und so wie ich das verstehe müssten die ja dann in der richtigen bitkombination leuchten wie der wert vom ADC zurückkommt oder?
spricht: (X=aus; O=an)
XXXX XXXX = 0
XXXX XXXO = 1
XXXX XXOX = 2
XXXX XXOO = 3
XXXX XOXX = 4
....
....
....
OOOO OXOO = 251
OOOO OOXX = 252
OOOO OOXO = 253
OOOO OOOX = 254
OOOO OOOO = 255
bei mir siehts aber komischerweise so aus das LED 3, 5 und 6 immer leuchten und wenn ich von 0V bis 5V hochdrehe dann flackern LED 7 und 8 rasend schnell abwechselnd auf und LED 1 und 2 zählen 4 mal durch
also 4mal
XX
XO
OX
OO
kann es sein das ich meinen ADC teiler nicht auf 8bit sondern auf 4 bits beschränkt habe? und kann mir einer erklären warum LED 3, 5 und 6 dauerhaft an sind?
danke
Grandalf
Lesezeichen