mikrocontroller.net

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


Autor: Maxx (Gast)
Datum:

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

Autor: Maxx (Gast)
Datum:

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

Autor: Name (Gast)
Datum:

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

Autor: Paul Baumann (Gast)
Datum:

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

Autor: Maxx (Gast)
Datum:

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

Autor: NoName (Gast)
Datum:

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


gruß

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  NoName (Gast)

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

Das ist auch so.

Autor: Paul Baumann (Gast)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Maxx schrieb:

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

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

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.