AD-Wandler in Bascom- ungenau?

Gast #1831326
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
Gast #1831340
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.
Gast #1831342
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.
Gast #1831369
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
Gast #1834387
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
Gast #1834631
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

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.