-
        

Ergebnis 1 bis 4 von 4

Thema: Tiny13 und Analogkomparator

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    01.07.2004
    Ort
    Osnabrück
    Beiträge
    30

    Tiny13 und Analogkomparator

    Anzeige

    Hallo,
    ich habe Probleme den AnalogKomparator richtig einzusetzen. Mein Programm reagiert nicht auf einen Pegelwechsel.

    Ein Pegelwechsel an PB2 (ADC1) soll vom Komparator erkannt werden. Bei jedem Pegelwechsel soll ein Relais wackeln (als Test). Verwendet werden soll die interne Referenz von 1,1V. Mein Pegel muss dann also deutlich größer oder kleiner 1,1V sein.
    Wenn dass Programm die Mainloop erreicht hat, reagiert es nicht mehr

    Vielleicht könnt ihr den Fehler in meinem Programm entdecken.

    Danke Jörn

    Code:
     'Pin1-PB5= Reset mit 100nF gegen Masse und 10k nach 5V
     'Pin2-PB3= Relais
     'Pin3-PB4= Relais
     'Pin4= GND
     'Pin5-PB0= (MOSI)
     'Pin6-PB1= (MISO)
     'Pin7-PB2= SCK    und Analogeingang für den AnalogKomparator  ADC1
     'Pin8= VCC  5V
     '
    $regfile = "ATtiny13.dat"
    $crystal = 9600000
    $hwstack = 8
    $swstack = 2
    $framesize = 5
    
    Stop Timer0
    Stop Watchdog
    Stop Adc
    
    Dim Test01 As Byte
    Test01 = 0
    Ddrb = &B00011000
    
    Ddrb = &B00011000
          Portb.4 = 1                                           'Relais als Test wackeln
          Portb.3 = 0
          Waitms 500
          Portb.4 = 0
          Portb.3 = 1
          Waitms 500
          Portb.4 = 1
          Portb.3 = 0
          Waitms 500
    
          Ddrb = &B00000000
    
    
    
    Config Aci = On , Compare = Off , Trigger = Toggle
    
    
    Adcsrb.acme = 1                                             'Analoge Comparator Multiplexer Enable
    Acsr.acbg = 1                                               'Referenzspannung eingeschaltet
    'Adcsra.aden = 0
    Admux = 1                                                   'Analogeingang für den AC ist ADC1  d.h. PB2
    Start Ac
    On Aci On_aci
    
    Enable Interrupts
    
    Do
    
    
    
    Loop
    
    
    On_aci:
    Test01 = Adcsr.aco
    
    If Test01 = 0 Then
          Ddrb = &B00011000
          Portb.4 = 1
          Portb.3 = 0        'Relais als Test wackeln
          Waitms 500
          Portb.4 = 0
          Portb.3 = 1
          Waitms 500
          Portb.4 = 1
          Portb.3 = 0
          Waitms 500
    
          Ddrb = &B00000000
    Else
          Ddrb = &B00011000
          Portb.4 = 0
          Portb.3 = 1        'Relais als Test wackeln
          Waitms 500
          Portb.4 = 1
          Portb.3 = 0
          Waitms 500
          Portb.4 = 0
          Portb.3 = 1
          Waitms 500
    
    
          Ddrb = &B00000000
    End If
    
    Return

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    05.03.2011
    Ort
    Graz
    Beiträge
    29
    Hallo,

    mit dem Tiny13 habe ich noch nicht gearbeitet, aber ich schätze mal dass dein HW stack überläuft, nachdem er nur 8 Bytes groß ist und du in der ISR alle Register sicherst (= 32 Bytes HW Stack)...

    Probiers mal mit:
    Code:
    ...
    
    On Aci On_aci Nosave
    Dim Aci_isr_flag As Bit
    
    ...
    
    Do
    
       ...
    
       If Aci_isr_flag = 1 Then
          Aci_isr_flag = 0
    
          ...                       ' ISR code
    
       End If
    Loop
    
    ...
    
    On_aci:
       !push R25
       !push R24
       !IN R24, SREG
       !PUSH R24
       Aci_isr_flag = 1                                    ' set flag
       !pop R24
       !Out Sreg , R24
       !POP R24
       !pop R25
    Return
    mfg

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.410
    Blog-Einträge
    101
    Hallo moin,

    ich kann auch nicht entdecken, wo Du den Interrupt für den Comparator ermöglichst. zB mit "Enable ACI"
    Enable Interrupts ermöglicht nur generell Interrupts.

    Gruß
    Searcher
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    01.07.2004
    Ort
    Osnabrück
    Beiträge
    30
    Ich möchte mich bei euch für die Hilfe bedanken. Der Fehler wurde gefunden.

    Hier ist nun der funktionierende Code. Der Tiny13 wird nun mit 128kHz getaktet um Strom zu sparen und um wenig Funktörungen hervorzurufen (meine Sorge). Mehr Einsparpotential bei der Energie kann ich nicht mehr finden. Der Verbrauch liegt bei <1mA.

    Der Tip mit dem fehlenden "Enable Aci" hat den Durchbruch gebracht. Zur Sicherheit habe ich auch noch den Stack vergrößert.

    Grüße Jörn

    Code:
     
     'Pin1-PB5= Reset mit 100nF gegen Masse und 10k nach 5V
     'Pin2-PB3= Relais
     'Pin3-PB4= Relais
     'Pin4= GND
     'Pin5-PB0= (MOSI)
     'Pin6-PB1= (MISO)
     'Pin7-PB2= SCK    und Analogeingang für XFIL (AnalogKomparator)
     'Pin8= VCC  5V
     '
    $regfile = "ATtiny13.dat"
    '$crystal = 9600000
    $crystal = 128000
    $hwstack = 32
    $swstack = 8
    $framesize = 16
    
    Stop Timer0
    Stop Watchdog
    Stop Adc
    
    Dim Test As Byte
    
    Config Aci = On , Compare = Off , Trigger = Toggle
    
    
    Adcsrb.acme = 1                                             'Analoge Comparator Multiplexer Enable
    Acsr.acbg = 1                                               'Referenzspannung eingeschaltet
    Admux = 1
    Start Ac
    On Aci On_aci
    Stop Adc
    
    If Acsr.aco = 1 And Test = 1 Then
          Test = 0
          Ddrb = &B00011000
          Portb.4 = 0
          Portb.3 = 1                                           'Relais als Test wackeln
          Waitms 100
          Ddrb = &B00000000
      End If
    
    If Acsr.aco = 0 And Test = 0 Then
          Test = 1
          Ddrb = &B00011000
          Portb.4 = 1
          Portb.3 = 0                                           'Relais als Test wackeln
          Waitms 100
          Ddrb = &B00000000
    End If
    
    Enable Aci
    Enable Interrupts
    
    Do
    Power Idle
    'Idle
    Loop
    
    
    On_aci:
    
    If Acsr.aco = 1 And Test = 1 Then
          Test = 0
          Ddrb = &B00011000
          Portb.4 = 0
          Portb.3 = 1                                           'Relais als Test wackeln
          Waitms 100
          Ddrb = &B00000000
      End If
    
    If Acsr.aco = 0 And Test = 0 Then
          Test = 1
          Ddrb = &B00011000
          Portb.4 = 1
          Portb.3 = 0                                           'Relais als Test wackeln
          Waitms 100
          Ddrb = &B00000000
    End If
    Return

Ähnliche Themen

  1. Probleme mit Analogkomparator
    Von ACsenf im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 0
    Letzter Beitrag: 09.04.2008, 18:19
  2. Frequenzverdopplung mit Tiny13
    Von Marten83 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 0
    Letzter Beitrag: 09.08.2007, 16:58
  3. ADC mit Tiny13
    Von krtv_stsc im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 08.05.2007, 22:04
  4. Tiny13
    Von rolfw20 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 23.03.2007, 11:10
  5. Tiny13 und Sound
    Von UweMD im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 6
    Letzter Beitrag: 13.07.2006, 14:48

Berechtigungen

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