Archiv verlassen und diese Seite im Standarddesign anzeigen : Analogeingang am ATmega32 programmieren
Hallo! Probiere und suche schon den ganzen Abend.
Wie muss ein Programm für BASCOM aus sehen um an einem Analogeingang (PA0 bis PA7) einen Wert ein zu lesen und zu verarbeiten.
Ich habe auch schon nach Beispielprogrammen gesucht aber nichts nichtiges gefunden.
Danke für jede Hilfe
Suche mal nach Getadc. Das ist die Funktion zum Einlesen des analogen Wertes.
Gruß
Rolf
Config Adc = Single , Prescaler = Auto
Config Porta = Output
Start Adc
Das verstehe ich nicht ganz, ist der ganze Port die PINs auf AD gestellt?
Und warum wirde der Port dann als output configuriert?
Danke für die schnelle Antwort
Besserwessi
06.07.2009, 00:57
Den ganzen Port als Output zu definieren ist fast immer falsch. Die Pins die man als analogen Eingang nutzen will sollte man schon als Eingang definieren. Mit der Configuration wird nur der takt und die Referenzspannung festgelegt. Den Eingang legt man beim Aufruf von GetADC(KanalNr) fest.
Hallo! Bin immer noch am probieren auf mein Steckbrett und dem BASCOM.
Hab am mega32 ein Poti an Pin PA0 angesteckt und eine LED an PIN PC0.
Die LED soll leuchten wenn das Poti über die hälfte gedreht wurde, aber es passiert nichts!!!
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 16000000
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Config Portc.0 = Output
Dim Analogwert_0 As Word
Start Adc
Do
If Analogwert_0 > 125 Then
Portc.0 = 1
Else
Portc.0 = 0
End If
Loop
Stop Adc
End
Könnte mir jemand erklären wo der fehler liegt.
Währe sehr dankbar.
Sauerbruch
08.07.2009, 01:14
Könnte mir jemand erklären wo der fehler liegt.
Na klar!
Exakt zwischen "Do"
und "If Analogwert_0 > 125 Then"
:-)
Woher soll der µC den wissen, welchen Wert die Variable Analogwert hat?
Ich dacht mit Analogwert_0 fragt der chip den Port PA0 ab.
Wie müsste das Programm denn aus sehen damit es so funktioniert wie ich es gerne hätte?
seit wann kann bascom deutsch?¿
Analogwert_0 = getadc(0)
Das kam mir auch komisch vor, aber ich fange auch gerade erst mit
BASCOM an hab zuvor C-Control gehabt da war das etwas einfacher
Nur wie wende ich "getadc(0)" an habe schon viele varianten gefunden nur alle in verbindung mit ein LCD.
Wie bringe ich eine LED dazu darauf anzusprechen?
Danke!
geh jetzt aber penn, gute nacht
Sauerbruch
08.07.2009, 08:00
Nur wie wende ich "getadc(0)" an
Genau so, wie Vitis es geschrieben hat:
Analogwert_0 = getadc(0)
Mit dieser Syntax wird einer X-beliebigen Variablen der Analogwert am Eingang ADC0 zugewiesen. Wie du diese Variable nennst und was du dann mit dieser Variablen machst, bleibt dir überlassen: Sie auf einem LCD ausgeben, mit einem Vergleichswert vergleichen und dementsprechend eine LED schalten, oder, oder, oder.
In Bascom gibt´s eine sehr gute Hilfe-Funktion (bin bei vielen anderen Programmen nicht sooo der Fan von so etwas, bei Bascom ist sie aber wirklich genial). Dort findest du zu jedem Befehl nicht nur die korrekte Syntax, sondern auch noch echte Code-Beispiele. Kann ich nur empfehlen!!
Hallo! Nun habe ich das programm etwas verändert und es geht immer noch nicht.
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 16000000
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Config Portc.0 = Output
Dim Analogwert_0 As Byte
Analogwert_0 = Getadc(0)
Start Adc
Do
If Analogwert_0 > 125 Then
Portc.0 = 1
Else
Portc.0 = 0
End If
Loop
Stop Adc
End
ich kann das poti drehen wie ich will aber die led zeigt nichts an, bei compilieren ist auch kein erreo aufgetreten, es müsste doch eigentlich gehen
BlaueLed
08.07.2009, 12:31
Hi,
pack das "Analogwert_0 = Getadc(0)" in die Do ... Loop schleife und lösch das "Stop ADC" aus der Schleife. Dann funktioniert es. Aber jetzt mal ganz ehrlich. In der Hilfe von Bascom steht das alles so schon drin.
Gruß Blaue Led
Sauerbruch
08.07.2009, 13:45
Nur so zum Verständnis:
Der Befehl "Analogwert_0=Getadc(0)" führt zu einer einzigen AD-Wandlung! Wenn sich danach die Spannung am Eingang ändert, bleibt die Variable Analogwert_0 so lange unverändert, bis der Controller das nächste mal den Getadc-Befehl ausführt.
Und genau deshalb muss dieser Befehl in die Do-Loop-Schleife, wie Blaue LED ja schon geschrieben hat.
Jetzt klarer?
OK. So weit habe ich nicht gedacht, ist im nachhinein ganz logisch, das der
Befehl in die Schleife muss. Jetzt gehts. DANKE
Wenn ich die Variable Analogwert_0 nicht als "Word" sondern als "Byte" deklariere passiert etwas komisches: wenn ich das poti drehe egal in welche richtung geht die LED mal AN mal AUS wieder AN und wieder AUS (beim drehen)
Vielen Dank!
BlaueLed
08.07.2009, 22:42
Du liest einen Wert ein, der von 0 - 1023 geht. Das passt halt nicht mehr in ein Byte ( 0 - 255 ). Wenn Du nur 255 Werte haben willst, dann musst Du den Analog Wert explizit mit nur 8 Bit einlesen. Standardmäßig ist der 10 Bit.
Gruß Blaue Led
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.