-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: Tiny13 externer Interrupt Verständnisproblem

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    31.08.2008
    Beiträge
    12

    Tiny13 externer Interrupt Verständnisproblem

    Anzeige

    Hallo ich stehe vor dem Problem daß ich in einem Tiny ein Programm (Soft-PWM) laufen habe, ich benötige zur Kommunikation mit diesem Programm einen externen Interrupt.

    Laut Datenblatt hat der Tiny13 diese auch nur komme ich mit der Abfrage nicht ganz klar.
    Ich möchte daß bei Steigender Flanke auf Pin B.3 ein interrupt ausgelöst wird.

    Wenn ich allerdings in Bascom mittels Int diesen Interrupt konfigurieren klappt auch so weit alles, zumindest in Software.
    Bevor ich allerdings mit dem Löten anfange brauch ich noch ein paar Informationen.

    Wenn ich den externen Interrupt anstelle wie lege ich fest welcher Pin den Interrupt auslöst? Oder lösen alle Pins den Interrupt aus? Das wäre fatal da ich auf 3 Pins ne Soft-PWM laufen habe mit dementsprechenden schnellen Pegelwechseln. Ich werde aus dem Datenblatt des Tiny13 Seite 45 nicht ganz schlau, lösen die Interrupts auch aus bei Pins die als Ausgang fungieren?

    Bitte um Hilfe

    Rolle77

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.02.2005
    Ort
    Hamburg
    Alter
    31
    Beiträge
    4.255

    Re: Tiny13 externer Interrupt Verständnisproblem

    Zitat Zitat von Rolle77
    Wenn ich den externen Interrupt anstelle wie lege ich fest welcher Pin den Interrupt auslöst?
    Es gibt beim t13 zwei verschiedene externe Interrupt-Systeme. Einmal den INT0 (PB1) und dann den Pin-Change-Interrupt auf allen IO-Pins. Der INT0 hat nen eigenen Interruptvektor, die Pin-Change teilen sich einen gemeinsamen für alle Pins . Bei Pin-Change muss man in der ISR also zuerst abfragen, wer denn nun wirklich den Interrupt ausgelöst hat. Wenn du nur einen Kanal brauchst, nimm am besten den INT0, falls du da noch flexibel bist.

    Zitat Zitat von Rolle77
    Oder lösen alle Pins den Interrupt aus? Das wäre fatal da ich auf 3 Pins ne Soft-PWM laufen habe mit dementsprechenden schnellen Pegelwechseln. Ich werde aus dem Datenblatt des Tiny13 Seite 45 nicht ganz schlau, lösen die Interrupts auch aus bei Pins die als Ausgang fungieren?
    Ein Interupt wird auch beim Ausgang ausgelöst. Aber man kann für jeden Pin einzeln festlegen, ob er den int auslösen soll oder nicht.

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    Es gibt zwei Sorten von Interrupts:

    "Normale" Interrupts:
    Gibt´s beim Tiny13 nur einen, der heißt INT0, kann nur über PINB.1 ausgelöst werden, aber auch auf steigende/fallende Flanke (und noch mehr) konfiguriert werden.

    "Pin Change"-Interrupts:
    Gibt´s beim Tiny13 sechs Stück (PCINT0-5). Wie der Name schon sagt, werden sie durch den Wechsel des Eingangspegels getriggert, d.h. man kann sie nicht auf steigende oder fallende Flanke konfigurieren. Sie lösen immer einen Interrupt aus, wenn der Pegel sich ändert.

    Da man ja aber meist nicht will, dass Pegelwechsel an allen 6 PCINT-Pins einen Interrupt auslösen, kann man im Register PCMSK festlegen, welcher der 6 Pins einen Interrupt auslösen soll. B3 löst z.B. PCINT3 aus - Du müsstest also &B00001000 in dieses Register schreiben.
    Und freigegeben werden die PinChange-Interrupts, wenn das Bit 5 im GIMSK-Register gesetzt wird (GMISK.5=1).

    Dann wird die ISR zwar bei jedem Pegelwechsel angesprungen. Wenn Du sie aber in etwa so gestaltest

    Code:
    ISR:
     If Pinb.3=1 then
      ...
      ...
      ...
     End if
    Return
    dann werden die entsprechenden Befehle nur bei steigender Flanke ausgeführt.

    O.K.?

    Gruß,

    Daniel

    Edit: Oops, hatte die Antwort von uwegw nicht gesehen...

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    31.08.2008
    Beiträge
    12
    Hallo,

    Danke für dir Antworten.
    Habe ich das richtig verstanden das ich im PCMSK-Register festlege welcher Pin einen Interrupt auslösen darf? Ich habe ein Testprogramm geschrieben und das im Bascom-Simulator angesehen das Register PCMSK ist dort dauernd 00. Das heisst also dass ich int0 konfigurieren kann wie ich lust habe (Flanke steigend fallend usw) das aber nicht mit den anderen Interrupt eingängen geht?
    Int0= Möglichkeiten Steigend Fallend Low
    Int1-5= nur Pin Change möglich

    Stimmt das so?

    Wenn ja werde ich wohl das Layout noch mal ändern (auf INT0) müssen.

    Rolle77

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    Int0= Möglichkeiten Steigend Fallend Low
    Int1-5= nur Pin Change möglich

    Stimmt das so?
    Fast - es gibt PCINT0-5. Die Nr. 0 gibt´s also doppelt, als INT0 und PCINT0.

    Ansonsten ist alles richtig. Und im Register PCMSK steht so lange 0, wie Du nichts anderes reingeschieben hast.

    Mit den zwei Befehlen

    PCMSK = &B00001000
    GIMSK.5 = 1

    ginge es auch mit dem Pin B.3. Du müsstst halt die ISR nur so schreiben, dass die dort stehenden Befehle (es sollten ja nicht viele sein...) nur ausgeführt werden, wenn Pinb.3 1 ist.

    Aber mit INT0 geht´s natürlich af jeden Fall - wenn´s nicht zu viel Arbeit ist, das Layout zu ändern...

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    20.09.2008
    Beiträge
    62
    hallo allerseits,
    ich habe mich aufgrund einer aufgabenstellung (gartentorsteuerung) mit dem thema microcontroller zu beschäftigen begonnen (mit herkömmlichen bauteilen viel zu aufwändig).
    elektronik allgemein ist mir nicht fremd, nur die mc geschichte ist absolutes neuland für mich.

    ich habe mir beim conrad das lernpaket von franzis gekauft.
    da ist eine kleine experimentierplatine mit einem tiny13 enthalten.
    und genau wie rolle77 habe auch ich eine frage zu dessen interrupts.

    ich brauche zwei eingänge:
    einer soll mit fallender flanke getriggert werden.
    am anderen liegt entweder 0V, ca. 3V oder 5V. allerdings muss ich hier einen zwischenstatus abfragen, der im bereich von 2-4V (wird festgelegt, z.b. 3V) liegen soll (torstellung irgendwo aber nicht an einer der endstellungen).

    nun meine fragen:
    int0 gibt es nur auf pb1. gut
    wie aber unterscheidet der sich vom pcint am pb1? beide können doch mit fallender oder steigender flanke den interrupt auslösen oder irre ich hier?
    und wie kann ich die zweite aufgabe lösen, bei der ich zwar einmal eine steigende und einmal eine fallende flanke habe, je nach richtung des tores (auf/zu) allerdings nicht von 0 oder 5V sondern eben vom definierten mittelwert (2-4V).

    danke im voraus für eure hilfe

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    int0 gibt es nur auf pb1. gut
    wie aber unterscheidet der sich vom pcint am pb1? beide können doch mit fallender oder steigender flanke den interrupt auslösen oder irre ich hier?
    Nein, Du irrst nicht! Der Unterschied ist ganz einfach der, dass der externe Interrupt INT0 (bei anderen Controllern gibt´s auch noch INT1 und z.T. INT2) auf 5 verschiedene Auslösebedingungen konfiguriert werden kann: Steigende Flanke, fallende Flanke, jede Flanke, High-Pegel und Low-Pegel.

    Die PinChange-Interrupts (PCINT0-5) können - wie der Name schon sagt - nur von einem Flankenwechsel ausgelöst werden, und zwar unabhängig von der Richtung des Wechsels. Jede Änderung des logischen Pegel löst den Interrupt aus (natürlich nur, wenn der entsprechende Interrupt freigegeben ist).

    PCINTs können aber auch nur für fallende Flanken verwendet werden, wenn Du in der Interrupt-Routine die steigenden Flanken "ausmistest", etwa so (für PCINT0 über PinB0):

    PCINT_ISR:
    If Pinb.0=0 then
    ..... (was auch immer getan werden soll)
    .....
    End if
    Return

    Die andere Sache wäre was für den Analog-Digital-Converter (ADC) - hast Du Dich mit dem schon mal auseinandergesetzt?

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    20.09.2008
    Beiträge
    62
    danke für die rasche antwort.

    nein, ich hab mich noch nicht mit ADC auseinander gesetzt.
    ich befasse mich erst seit 3 tagen mit der mc-materie.
    zudem habe ich weder assemblerkenntnisse (assembler ist beim lernpaket enthalten) noch basic (außer den resten aus der schule vor 35 jahren)

    wenn ich dich richtig verstanden habe, wird der pcint generell bei steigender oder fallender flanke ausgelöst (nicht definierbar), wogegen das den int0 auslösende ereignis entsprechend definiert werden kann.

    ich wollte den tiny 13 nach getaner arbeit "schlafen" schicken (power down mode), da er nur 2-5x am tag für etwa 1 minute aktiv sein braucht.
    kann denn ein pegelwechsel am ADC eingang einen interupt auslösen?
    der muss doch dauernd abgefragt und analysiert werden, oder irre ich hier?

  9. #9
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    Das mit den Interrupts ist genau so, wie Du schreibst: PCINT wird bei jedem Flankenwechsel ausgelöst, INT0 dagegen je nach Konfiguration.

    Assembler ist natürlich die ganz hohe Schule, damit hatte ich auch versucht anzufangen (bin weder beruflich noch familiär mit dieser Materie vorbelastet
    ). Aber mit Bascom kann man halt sehr schnell erste brauchbare (!) Ergebnisse erzielen, auch wenn das Schul-Basic schon etwas zurückliegt. Bei mir waren´s auch immerhin 25 Jahre...

    Mit Sleep-Modi habe ich mich noch nicht beschäftigt - habe aber mal ins Datenblatt vom Tiny13 geschaut. Mit einem analogen Signal scheint man ihn nicht aufwecken zu können, wohl aber mit Flankenwechseln an interrupt-fähigen Eingangspins. Ob sich am Analog-Signal etwas getan hat, wirst Du aber wohl nur durch wiederholte Mesungen mit dem ADC herausfinden können (messen, speichern, nochmal messen, vergleichen).

    Hast Du denn überhaupt Bascom? Und das superhilfreiche Datenblatt vom Tiny13?

    LG,

    Daniel

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    20.09.2008
    Beiträge
    62
    hallo daniel,

    nein, basecom habe ich nicht. werde mir die demo version mal runter laden und schauen, was ich damit anfangen kann.
    allerdings erhebt sich die frage, ob ich damit dann auch mit der lernplatine von franzis den tiny flashen kann - die also zusammen verwendet werden können.
    ehrlich gesagt will ich mir nicht noch eine platine kaufen, wenns mit der franzis und basecom nicht flutscht ...
    allerdings sollte es ja egal sein, welches hex-file ich dem flasher unterjuble - hex ist hex, egal woher es stammt, oder?

    ja, das tiny13 datenblatt habe ich mir geholt.
    allerdings muss ich einiges erst richtig verstehen um es dann auch entsprechend anwenden/programmieren zu können.
    für mich war es anfangs ja auch undenkbar, dass ein pin ein- und ausgang sein kann. ist bei herkömmlichen "käfern" ja unmöglich.

    das aufwecken mit dem adc ist nicht wirklich ein thema.
    der eingang wird nur etwa 5 sekunden abgefragt. während dessen kann der tiny ja problemlos "wach" bleiben. war nur so eine idee ...
    wo ich aber das wakeup brauche ist am pb1 (int0) und da bekomme ich eine steile flanke von vcc nach vdd - passt also.

    derzeit gehe ich alles theoretisch durch - am papier.
    bis ich weiß, welche funktionen ich brauche und sie "behirnt" habe.
    wenn ich die hardware/signale/levels fixiert habe gehts weiter zum programmieren.
    erst wenn ich ein gutes gefühl habe, dass es passen könnte wird umgesetzt.

    lg heinz

    ps: bin halt ein absoluter neuling auf dem mc-gebiet und da tauchen immer wieder fragen auf, die das datenblatt nicht so erklären kann, dass ich es verstehe

    noch was:
    ich logge mich ein, schreibe die antwort und beim abschicken muss ich mich erheut einloggen und meine antwort ist futsch!!
    warum!?
    wenn ich sie vorher kopiere, einlogge, dann einfüge und abschicke gehts ok.
    loggt das system nach einer weile aus?
    kannst du das beantworten oder muss ich mich da an die admin wenden?

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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