- Reichelt Elektronik    Werbung      
Ergebnis 1 bis 7 von 7

Thema: Alias für Timer und externe Interrupts

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    706
    Moin Micha,

    das ist ja wirklich erstaunlich. Erst dachte ich es läge daran, dass der Befehl Alias sich immer nur auf Variablen beziehen kann (so steht´s in der Bascom-Hilfe jedenfalls geschrieben). "Timer0" könnte Bascom ja noch als eine Variable im weiteren Sinne auffassen, nämlich als das Register TCNT0. Interessanterweise setzt Bascom unter Verwendung des Timer-Alias aber auch das Timer-Control-Register (TCCR0) korrekt, nämlich auf &b00000011, was einem Prescaler von 8 entspricht.

    Kurzum - ich kann Dir nicht sagen, weshalb das mit dem Alias beim Timer0 so gut funktioniert, aber beim INT0 nicht.

    Aber vielleicht mal ´ne kurze Gegenfrage: Was wäre denn mit dem Alias gewonnen? Irgendwann müsstest Du doch auch für diesen Workaround wissen, welcher Interrupt denn nun Myinterrupt sein soll. Und wenn Du das weißt, kannst Du doch gleich den Interrupt direkt konfigurieren - das muss ja nur ein einziges mal vor der Do-Loop-Schleife passieren!

    Gruß,

    Daniel

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.07.2008
    Ort
    Villingen-Schwenningen
    Beiträge
    143
    Hallo Sauerbruch,
    eigentlich ist die Frage schon oben erklärt.
    Aber gut ich versuchs mal genauer zu erklären.

    Nehmen wir an, ich habe vor Urzeiten schon einmal eine Library für Bascom geschrieben, die Ebenfalls INT0 verwendet.
    Und nun nehme ich diese von oben für ein Projekt hinzu, dann wollen beide INT0 und das geht nicht.

    Daher wollte ich meine Lib flexibler halten und dem Programmierer überlassen, welchen Interrupt er nehmen möchte.

    Ähnliches gibt es auch bereits bei den Bascom-Befehlen:
    CONFIG RC5 = pin [,TIMER=2] [,WAIT=value] [,MODE=BACKGROUND]


    Hier läßt sich beispielsweise per Configuration der Timer auswählen.
    Ich finde auch, dass das Sinn macht. Schließlich haben die Timer meist Differenzen in den Eigenschaften.
    Output Compare Match als Beispiel bei Atmega 8 sind Different.

    Konnte ich deine Frage beantworten?

    Micha.

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    54
    Beiträge
    765
    Hallo,

    "on MyTimer" geht auch nicht.

    Am besten #IF und #ENDIF nutzen.
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.07.2008
    Ort
    Villingen-Schwenningen
    Beiträge
    143
    Vielleicht ist das der einzigste Weg mit Compiler-Direktiven,

    nur umständlich, wenn dann jemand eine MCU nimmt, die dann auch noch INT2, INT3 etc unterstützt.
    Das lässt sich kaum alles abfangen.

    Gits noch eine Möglichkeit?

    Micha.

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    54
    Beiträge
    765
    Hallo,

    evtl. mal den Programmierer (oder in seinem Forum) fragen.
    Code:
    '  Demo,
    '  Alias für Timer und externe Interrupts verwenden
    
    $regfile = "m8def.dat"
    $crystal = 8000000
    $hwstack = 32
    $swstack = 32
    $framesize = 32
    
    const MyTimer=0
    const MyIRQ=0
    
    
    ' Alias mit Timer geht offensichtlich
    #if MyTimer=0
       Config Timer0 = Timer , Prescale = 8
       on Timer0 ISR_MYTimer
    #endif
    
    #if MyTimer=1
       Config Timer1 = Timer , Prescale = 8
       on Timer1 ISR_MYTimer
    #endif
    
    #if MyIRQ=0
       Config INT0 = Rising
       on INT0 ISR_INTn
       enable int0
    #endif
    
    #if MyIRQ=1
       Config INT0 = Rising
       on INT0 ISR_INTn
       enable int1
    #endif
    
    
    Enable Interrupts                                           ' Global Interrupts zulassen
    
    Do
       ' nichts zu tun
    Loop
    
    ISR_INTn:
       ' Interrupt-Routine
    Return
    
    ISR_MYTimer:
    
    return
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.07.2008
    Ort
    Villingen-Schwenningen
    Beiträge
    143
    ich seh schon, offensichtlich gibt es keine andere Möglichkeit.
    Danke für die Code-Ausführung, aber die Umsetzung war mir soweit schon klar.

    Habe übrigens noch einen Bascom-Befehl gefunden, der Interrupt-Nr. annimt.

    Schau mal bei
    CONFIG HITAG = prescale, TYPE=tp, DOUT = dout, DIN=din , CLOCK=clock, INT=int

    CONFIG HITAG = prescale, TYPE=tp, DEMOD= demod, INT=@int

    Wie funktioniert das intern?

Ähnliche Themen

  1. externe Interrupts stören sich
    Von Otzelott im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 11.04.2007, 08:53
  2. Externe Interrupts?
    Von Dane im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 16.12.2005, 21:24
  3. zwei externe Interrupts
    Von globe im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 27.02.2005, 15:55
  4. Externe Interrupts beim Atmega32
    Von Javik im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 11
    Letzter Beitrag: 23.11.2004, 15:04
  5. Externe Interrupts
    Von BomberD im Forum C - Programmierung (GCC u.a.)
    Antworten: 6
    Letzter Beitrag: 12.11.2004, 05:35

Stichworte

Berechtigungen

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

    Werbung      LiFePO4 Speicher Test