Forum: Mikrocontroller und Digitale Elektronik AD-Wandler in Bascom- ungenau?


von Maxx (Gast)


Lesenswert?

Hallo,
habe ein Programm in Bascom geschrieben, daß den Poti- Wert an  ADCO 
einliest und  den zugehörigen Spannungswert an 4 LED's ausgibt.
Rein theoretisch müsste doch B0 bei 1,25V, B1 bei 2,5V, B2 bei 3,75V und 
alle 3 LED's bei 5V aufleuchten. Als Referenz dienen die 5V 
Versorgungsspannung. An ADC0  muß dann doch die Spannung entsprechend 
meßbar sein? Das Poti ist an ADC08 (pin23 Schleifer), + der Anfang und - 
das Ênde angeschlossen.
Von 0V bis 2,4V leuchtet B0, von 2,4V bis 3,4V leuchtet B1, von 3,4 V 
bis 5V leuchtet (nur!)B1.

Mache ich etwas falsch?
***********************************************************
$regfile = "m8def.dat"
$crystal = 1000000

Dim Ad As Word

Config Portb = Output
Config Adc = Single , Prescaler = Auto , Reference = Avcc

Start Adc

Do
  Ad = Getadc(0)
  If Ad = 256 Then Portb.0 = 1 : Portb.1 = 0 : Portb.2 = 0  '1,25V

  If Ad = 512 Then Portb.0 = 0 : Portb.1 = 1 : Portb.2 = 0  '2,5V

  If Ad = 768 Then Portb.0 = 0 : Portb.1 = 0 : Portb.2 = 1  '3,75V

  If Ad = 1024 Then Portb.0 = 1 : Portb.1 = 1 : Portb.2 = 1 '5,0V

  End If
Loop
**********************************************************
Danke im Voraus Maxx

von Maxx (Gast)


Lesenswert?

Hallo,

habe mich verschrieben und möchte es dem "Antworter" nicht noch 
erschweren.

>> Das Poti ist an ADC0 (pin23 Schleifer), + der Anfang und -
>>das Ênde angeschlossen.
>>Von 0V bis 2,4V leuchtet B0, von 2,4V bis 3,4V leuchtet B1, von 3,4 V
>>bis 5V leuchtet (nur!) B2.
Gruß Maxx.

von Name (Gast)


Lesenswert?

Maxx schrieb:
> Do
>
>   Ad = Getadc(0)
>
>   If Ad = 256 Then Portb.0 = 1 : Portb.1 = 0 : Portb.2 = 0  '1,25V
>
>
>
>   If Ad = 512 Then Portb.0 = 0 : Portb.1 = 1 : Portb.2 = 0  '2,5V
>
>
>
>   If Ad = 768 Then Portb.0 = 0 : Portb.1 = 0 : Portb.2 = 1  '3,75V
>
>
>
>   If Ad = 1024 Then Portb.0 = 1 : Portb.1 = 1 : Portb.2 = 1 '5,0V
>
>
>
>   End If
>
> Loop


If Ad < 256 Then
        Portb.0 = 1
        Portb.1 = 0
         Portb.2 = 0  '1,25V

  ElseIf Ad < 512 Then
       Portb.0 = 0
       Portb.1 = 1
       Portb.2 = 0  '2,5V

  ElseIf Ad < 768 Then
      Portb.0 = 0
      Portb.1 = 0
      Portb.2 = 1  '3,75V

 Elseif If Ad < 1024 Then
      Portb.0 = 1
      Portb.1 = 1
      Portb.2 = 1 '5,0V
  end if

muste richtig gehen.

falls kein end if, else etc gibt wird nur die erste anwesung nach IF 
bedingt ausgeführt. also die zuweisungen 2 und 3 werden ignoriert.
2 Du solltest eigentlich nicht die Stuffen direkt abfragen mit "=", 
sondern bereiche mit "<" weil snst nur an dem stuffenwert was geändert 
wird also bei einderung won 298 auf 45 passiert nix.

von Paul Baumann (Gast)


Lesenswert?

Das geht am Besten mit der Select-Käse äh Case Anweisung:

$regfile = "m8def.dat"
$crystal = 1000000

Dim Ad As Word

Config Portb = Output
Config Adc = Single , Prescaler = Auto , Reference = Avcc

Start Adc

Do
 Ad = Getadc(0)
 Select Case Ad
  Case 0 To 255 : Portb = &B00000001
  Case 256 To 512 : Portb = &B00000010
  Case 512 To 768 : Portb = &B00000100
  Case 769 To 1023 : Portb = &B00000111
  Case Else : Portb = 0
 End Select
Loop

MfG Paul

von Maxx (Gast)


Lesenswert?

Hallo,

vielen Dank für Eure Antworten. Hätte ich vielleicht selber draufkommen 
können, aber manchmal sieht man ja den Wald vor lauter Bäumen nicht.
@ Paul dises Prog. ist gut und durch "Case"-Abfrage kürzer und besser 
als meins.
Ich habe mal die Spannungen gemessen:

'B0 gleich an
'B1 geht bei 1,35V (gemessen)an und bleibt bis 2,35V an ; B0 ist dkl.
'Abfrage auf 255
'B2 geht bei 2,58V (gemessen)an und bleibt bis 3,8V an ; B0 und B1 sind 
dkl.
'Abfrage auf 512
'ab 3,8V  gehen alle LED's an und bleiben bis 5V (gemessen)auch an.
'Abfrage auf 1024
Ist damit die Genauigkeit der AD-Wandlung ausgeschöpft?

@Gast
Ja, stimmt, daß er alle anderen Abfragen ignoriert.
Der Editor meldet immer 2 Fehler bei Deinem Programm.
Vl. Grüße und Danke
Maxx

von NoName (Gast)


Lesenswert?

mal dumm fragen: 1024?? ich dachte immer von 0-1023 sind die möglichen 
werte..


gruß

von Falk B. (falk)


Lesenswert?

@  NoName (Gast)

>mal dumm fragen: 1024?? ich dachte immer von 0-1023 sind die möglichen
>werte..

Das ist auch so.

von Paul Baumann (Gast)


Lesenswert?

>>mal dumm fragen: 1024?? ich dachte immer von 0-1023 sind die möglichen
>>werte..

Ja, deswegen hat sich schon manch Einer am Kopf gekratzt.
;-)
Aber: von 0-1023 sind 1024 Werte. 1023 ist der "obere Anschlag" und
mehr kommt ohnehin bei der Auflösung von 10 Bit nicht aus dem Wandler
heraus.

MfG Paul

von Karl H. (kbuchegg)


Lesenswert?

Maxx schrieb:

> Ist damit die Genauigkeit der AD-Wandlung ausgeschöpft?

Nein.
Aber das ist das, was da programmiert wurde.

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.