mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Atmega16 kleine Hilfe für ADC benötigt.


Autor: Lukas Piet (lzaman)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du musst das ADC Register einlesen, und nicht das MUX Register.

Autor: Lukas Piet (lzaman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie schreibe ich das denn?

bei

ADC0=x;

oder

ADC(0)=x; meckert WinAvr.

Autor: Walter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und du musst warten bis eine Wandlung fertig ist bevor du den Wert holst

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Lukas Piet (lzaman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja vorkauen?, ich beschäftige mich erst mit der Theorie bevor ich 
Fragen stelle.

Bei mir hat es noch nicht ganz klick gemacht, aber so langsam verstehe 
ich das ganze.

Danke für den TIP mit Code Wizards.

Autor: Joan P. (joan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lukas Piet wrote:
> Wie schreibe ich das denn?
>
> bei
>
> ADC0=x;
>
> oder
>
> ADC(0)=x; meckert WinAvr.

die zu beschreibende Variable muss immer links stehen.. also eher:
x=ADC0;

Ich würde an deiner Stelle mal das GCC Tutorial hier auf der Seite 
anschauen.. da ist bestimmt ne Menge für dich drin..
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.