- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 9 von 9

Thema: Blutiger Anfänger...ADC mit ATtiny2313

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    21.04.2006
    Ort
    Dortmund
    Alter
    36
    Beiträge
    379

    Blutiger Anfänger...ADC mit ATtiny2313

    Anzeige

    Powerstation Test
    Hallo!
    Wie schon im Titel erwähnt bin ich blutiger Anfänger was Mikrocontroller angeht. Mein Problem ist folgendes: Ich möchte zum lernen den ADC mal benutzen. Dazu habe ich folgende Vorraussetzungen:
    Ich habe ein Spannungssignal zwischen 0-5V. Der Mikrocontroller soll jetzt schlicht und einfach eine LED anschalten wenn der eingangswert 5V beträgt. Wäre eventuell jemand so freundliche und würde mir diesen (für euch mit sicherheit simplen) quellcode einmal basteln mit kommentaren damit ich die verwendung des ADC lerne? Der Code sollte logischerweise in Bascom Basic geschrieben sein.

    Folgenden Code habe ich mir "gedacht" wobei mir eben das genaue ansprechen des ADC fehlt:

    Code:
    $regfile = "2313def.dat"
     $framesize = 32
     $swstack = 32
     $hwstack = 32
     $crystal = 1000000
     $baud = 9600
    
    Config Portb.0 = Output
    
    Do
      If "ADC = 5 Volt"then
        Portb.0 = 1
    
      Else
        Portb.0 = 0
    
      End If
    Loop
    
    
    End

    Danke schon mal für eure Hilfe!

    Mfg

    oZe

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.05.2007
    Beiträge
    594
    Der ADC liefert recht differenzierte Signale... mit ADC = 5V wirst du keinen Erfolg haben. Da muss wenn schon ein Wertebereich wie 4,9V bis 5,1V her (es sei denn, du hast ein ultragenaues Netzteil...).
    Sowas kann man gut mit SELECT CASE machen.
    Schau dir mal die Samples in der Doku an, da stehen schonmal die Grundlagen drin.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    23.02.2006
    Beiträge
    40
    der tiny2313 hat nur einen Analogkomperator, kann also nur Spannungen
    vergleichen. Für "richtige" Analogauswertung musst du dir einen anderen Controller suchen.

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.05.2007
    Beiträge
    594
    Na, zumindest kann er dann schonmal Spannungsunterschiede feststellen...
    Von Versorgungsspannung zu ADC-Eingang...

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    21.04.2006
    Ort
    Dortmund
    Alter
    36
    Beiträge
    379
    Naja eine genauigkeit von 0,5V reicht mir schon. Das müsste dann ja eigentlich schon mit dem Komparator machbar sein. Ich werd auf jedenfall erst mal die Doku ansehen.

  6. #6
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    21.04.2006
    Ort
    Dortmund
    Alter
    36
    Beiträge
    379
    So ich habe mir jetzt mal die Samples angesehen. Dort finde ich leider nur was zu den "echten" ADC`s die z.b. der Mega48 besitzt. Ich habe mir jetzt folgenden Code gebastelt:

    Code:
    $regfile = "m48def.dat"                                     
    $crystal = 8000000
    $baud = 19200
    $hwstack = 32
    $swstack = 8
    $framesize = 24
    
    Config Adc = Single , Prescaler = Auto , Reference = Internal
    Config Portb.0 = Output
    Start Adc
    Dim W As Word
    
    
    
    Do
      W = Getadc(0)
    
      If W >= 5 Then 
      Portb.0 = 1 
    
     Else
        Portb.0 = 0
    
      End If
     
      Waitms 500
    Loop
    End
    Ist dieser Code soweit korrekt? Wo finde ich ein Beispiel wie ich das ganze mit dem Komparator vom Tiny2313 realisieren kann?
    Vielen danke noch mal für die Hilfe!

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    23.02.2006
    Beiträge
    40
    ja so sollte das schon gehen allerdings musst du bedenken,
    das der Wert den du zurückbekommst ein bit wert ist d.h.
    bei den 10bit Auflösung die der ADC hat gibt das bei 5V 1024
    bei deiner Abfrage schaltest du bei ca. 24 mV

  8. #8
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    21.04.2006
    Ort
    Dortmund
    Alter
    36
    Beiträge
    379
    Alles klar danke! Jetzt brauch ich nur noch nen Lösungsansatz wie ich das mit dem Komparator umsetzen kann...

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.08.2006
    Beiträge
    118
    Probier mal den:
    Code:
    'ADC03.BAS: Vereinfachter A/D-Konverter mit Nutzung der internen PullUps
    'Benötigte Hardware:
    ' - Nullmodemkabel zum PC für die Datenausgabe
    ' - Pin PB0/Ain2: 3,9 nF nach Masse (0...244 ==> 0,58mV...4,9V)
    ' - Pin PB1/Ain1: Mit Poti verbinden (Analoges Eingangssignal)
    '-----------------------------------------------------------------------------------------------------------------------------
    $regfile = "2313def.dat"                                    'AT90S2313-Deklarationen
    $crystal = 3686400                                          'Verwendeter Quarz: 3.6864 MHz
    $baud = 1200                                                'Datenausgabe zum PC mit 1200 Baud
    '
    Config Aci = On , Compare = Off , Trigger = Rising          'Komparator im an steigender Flanke, keine Verbindung mit Timer1
    Config Timer0 = Timer , Prescale = 8                        'Timer-Betrieb, Clock/8: Nach (1/3,6864MHz)*8*256 = 555 Mikrosekunden Überlauf
    '
    On Aci Oncomparator                                         'Interrupt-Routine für Komparator (Ende einer AD-Wandlung wegen normalem Ende der Messung)
    On Timer0 Onoverflow                                        'Interrupt-Routine für Timer0 (Ende einer AD-Wandlung wegen Überlauf)
    '
    Dim Poti As Byte                                            'Die Variable Poti enthält stets den aktuellen Annalog-(Poti-)-Wert
    '-----------------------------------------------------------------------------------------------------------------------------
    Enable Timer0                                               'Timer0-Overflow-Interrupt einschalten (initialisiert auch die erste Messung)
    Enable Interrupts                                           'Interrupts global zulassen
    Do                                                          'Hauptschleife
      Printbin Poti                                             'UART-Datenausgabe
    Loop
    '-----------------------------------------------------------------------------------------------------------------------------
    Onoverflow:                                                 'Timer0-Overflow-Interrupt: Ende Entladen (oder zu hohe Spannung)
      Enable Aci
      Ddrb.0 = 0                                                'Laden starten: Pin PB0/Ain2 auf Eingang...
      Portb.0 = 1                                               '...und PullUp einschalten
      Timer0 = 0                                                'Timer0 zurücksetzen, Ende der Messung bei Komparator-Interrupt (oder Timer-Überlauf)
    Return
    '-----------------------------------------------------------------------------------------------------------------------------
    Oncomparator:                                               'Komparator-Interrupt: AD/Wandlung beendet
      Poti = Timer0 - 16                                        'Timer0-Wert holen und Interrupt-Zeit abziehen
      Disable Aci
      Portb.0 = 0                                               'Entladen: Pin PB0/Ain2 auf 0 Volt...
      Ddrb.0 = 1                                                '...und auf Ausgang
      Timer0 = 254                                              'Entlade-Ende bei Überlauf (hier nur relativ wenige Takte nötig, da Entladen nicht über Widerstand)
    Return
    sollte mit einen ATtiny2313 auch gehen


    Wigbert

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad