Forum: Mikrocontroller und Digitale Elektronik 2313 und ADC


von Falko Jahn (Gast)


Lesenswert?

Hallo Leute !


Ich bin gerade ziemlich am verzweifeln. Habe festellen müssen, das die 
beiden Ain Eingäng gar keine AD-Converter sind ( natürlich erst nach dem 
Ätzen :-(, ja ja ich weiß Datenblätter lesen...)  Also hab ich noch eine 
R-C Beschaltung  vom Port B.2
nach Port B.0 auf die Platine "gebastelt", so wie es auch hier im Forum 
schon erwähnt wurde. Nur leider bekomme ich mit meinem Programm nur 
zufallszahlen.

hier der Code:
--------------------------
'Variables
Declare Sub Getadcvalue()
Dim Result As Byte
Dim Convertcomplet As Bit          '1 wenn AD Wandlung fertig

'Ein Ausgänge Festlegen
Config Pinb.0 = Input              'ACI IN
Config Pinb.1 = Input              'ACI IN
Config Pinb.2 =output              'ANALOG OUT
Daout Alias Portb.2                ' D/A Ausgang


'...und Interrupts Festlegen
Enable Interrupts
Enable Aci
Config Timer0 = Timer , Prescale = 1024
Enable Timer0
On Aci Aci_int
On Timer0 Timer_int


Do
      Call Getadcvalue()                                    'starte A/D 
Wandlung

      Do
      Loop Until Convertcomplet = 1   'warte bis Wandlung komplett
         Print Result                 'Debug print
         '........
         '..........
         ' hier steht irgendwann mal die Display Ausgabe Routine
         '..........
Loop

'*************************
'*AD Wandler start Routine
'****************************
Sub Getadcvalue
   Daout = 1                 'starte Ladevorgang
   Tcnt0 = 0                 'Timer zurücksetzen
   Start Timer0              '..und starten
   Convertcomplet = 0
End Sub


'******************************
'*Analog Comparator Interrupt
'******************************
Aci_int:
   Disable Interrupts
   Stop Timer0
   Result = Tcnt0

   Daout = 0
   Waitms 10
   Convertcomplet = 1
   Enable Interrupts

Return

'****************************************
'* Timer Überlauf = Eingang out of Range
'**************************************
Timer_int:
   Disable Interrupts
   Stop Timer0
   Result = 255

   Daout = 0
   Waitms 10
   Convertcomplet = 1
   Enable Interrupts

Return



---------------------------------
bin jetzt schon seit dem WE dran, und hab´s nicht
zum laufen gebracht ! Irgendwelche Ideen ?

- Falko

PS
Compiler: Bascom-AVR V1.11.6.4

von Markus (Gast)


Lesenswert?

Wo ist denn diese R-C Schaltung? Wie sieht die denn aus?

Gruß
Markus

von Falko Jahn (Gast)


Lesenswert?

Hallo

Also vom Port B.2 geht ein Widerstand zum Port B.0
und vom dort ein Kondensator nach GND geschaltet
R ist 24k
Für den Kondensator hab ich schon verschiedene Werte gestetet
(47n / 1uF..)

Das Analoge Eingangsignal geht auf Port B.1
( über Spannungsteiler und Z-Diode zur Begrenzung auf 5V)


-Falko

von Markus (Gast)


Lesenswert?

Hm,
mal abgesehen davon das ich von dem Basic Krempel kein Wort verstehe 
sehe ich als erstes mal, das der PortB.2 kein PWM Ausgang ist. Ich 
vermute mal das an diesem Port ein PWM Signal rauskommen soll welches 
dann durch Widerstand und Kondensator geglättet wird. Wenn der Compiler 
das PWM Signal nich per Software erzeugt kann es nicht gehen.

Gruß
Markus
http://www.elektronik-projekt.de/

von Falko Jahn (Gast)


Lesenswert?

Nein, kein PWM.
Es soll folgender maßen funktionieren :
Kondensator solange aufladen bis vom Komparator ein Interrupt
ausgelöst wird. Die Zeit vom start bis zum interrupt müßte doch
dann der Spannung am Eingang entsprechen.

1. Starte Kondensator Ladevorgang
2. Starte Timer

3. Wenn Interrupt dann...
4. Stop Timer
5. Ergebniss gleich Zeit Timer

6. Kondensator entladen
7. Timer auf null zurücksetzen


Obwohl PWM auch ne möglichkeit währe...

- Falko


PS:
Und ich versteh nix von diesen Assembler zeugs...

von Markus (Gast)


Lesenswert?

Hm, verstehe wie das funktionieren soll. Einen Fehler konnte ich jetzt 
leider nicht finden.

Gruß
Markus

von Remo (Gast)


Lesenswert?

Auf der Atmel Homepage gibt es eine Applikation Note "AVR128: Setup and 
Use the Analog Comparator".

Hat nur 3 Seiten. Vielleicht hilfts ja bei der Fehlersuche, wenn Du Dir 
die Funktionsweise des Comarators "reinzeihst".

Viel Glueck,
remo

von Michael (Gast)


Angehängte Dateien:

Lesenswert?

Low cost AD Wandler mit dem Analog Komparator.
http://elm-chan.org/docs/avr/avradc_e.html

von Uwe* (Gast)


Lesenswert?

Hi!
Ich vermute mal dein Timer ist schneller als die Ladekurve an deinem 
Eingang, mit 24K*47n brauchst du
1,13 ms bis 63% Umax(=Tau).Nach 5 Tau, sagt man, ist der Ladevorgang zu 
99% abgeschlossen. Das Ganze hat dann vor allem noch den blöden 
Beigeschmack einer e-Funktion und ist zum messen ungünstig. Besser wäre 
vermutlich eine Ladung mit I = const., dann ist t = C * delta U / I . 
Wenn du I und C auf deine Timerzeit abstimmst wird die Sache recht 
einfach. Achte aber beim entladen auf einen def. Startwert, sonst stimmt 
die Sache auch nicht.
Gruss Uwe

PS.:kann mal jemand die Sache mit den mind.4 Zeichen im Namen andern, 
jedesmal ist der Beitrag weg!!!!!!

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

So, das mit dem Namen ist repariert!

von Uwe (Gast)


Lesenswert?

Klasse und Danke!
Gruss Uwe

von Falko Jahn (Gast)


Lesenswert?

Danke für die Antworten, es klappt jetzt.
Hatte noch den falschen Chip bei Bascom eingestellt.
Die R und C Werte muß ich auch noch etwas optimieren.
Thanks...

Gruss
Falko

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
Noch kein Account? Hier anmelden.