Atmega16 kleine Hilfe für ADC benötigt.

OP #864463
Lesenswert?

Hi all,

Ich habe folgenden Code:

#include <avr/io.h>

int x;

int main ()
{
DDRA=0x00;
DDRB=0xFF;

ADMUX |= (1<<REFS1) | (1<<REFS0);
ADCSRA = (1<<ADEN) | (1<<ADPS1) | (1<<ADPS0);

while(1)
{
x=MUX0;
if (x<40){PORTB=0xFF;}
else {PORTB=0x00;}
}
return 0;
}



Wie kann ich die Variable x dem Ausgang PA0 zuordnen und mit dem 
anliegendem Wert LED's ein bzw. ausschalten?
Die LED's soll leuchten wenn AnalogWert an PA0 < 40 liegt. (von max. 
255).
Ansonsten bleiben sie dunkel?
Gast #864492
Lesenswert?

Hallo,
ich habe so ein bischen das Gefühl, dass du dir hier alles ein wenig 
vorkauen läßt. Daher würde ich dir einfach mal empfehlen dir einen 
ADC-Code aus dem Netz zu laden und den dann Schritt für Schritt zu 
analysieren. Auch wenn der Code nicht für den Mega16 ist, so sind die 
ADC´s der Mega Familie so ähnlich wenn nicht sogar identisch, so dass 
das fürs erste egal ist.

Oder benutzte doch einen der frei zur Verfügung stehenden Code-Wizards 
(AvrWiz , IODesigner bzw. AtmanVar) und stell dir den ADC entsprend 
deiner wünsche ein.
#864588
Lesenswert?

Du hast offensichtlich das Funktionsprinzip des ADC noch nicht ganz 
verstanden. Der ADC kann nur eine Wandlung gleichzeitig durchführen 
und besitzt auch nur ein Ergebnisregister ADC (das ist ein 
16-Bit-Register, das aus den beiden 8-Bit-Registern ADCL und ADCH 
besteht, was Dich bei der Programmierung in C aber zunächst nur am Rande 
interessieren muss).

Die Pins von Port A können über einen Multiplexer alternierend mit dem 
ADC verbunden werden. Der Multiplexer wird über die MUX -Bits im 
Register ADMUX gesteuert. Du musst, wenn Du einen Wert von PA0 
einlesen willst, den Multiplexer auf Kanal 0 einstellen, eine Wandlung 
durchführen und das Ergebnis aus dem Ergebnisregister einlesen, wenn die 
Wandlung beendet ist (entweder ADSC pollen oder mit Interrupt 
arbeiten). Wie das im Detail geht, steht im Tutorial.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren