PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Tiny13 externer Interrupt Verständnisproblem



Rolle77
31.08.2008, 19:00
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

uwegw
31.08.2008, 20:50
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.



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.

Sauerbruch
31.08.2008, 21:05
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




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... :-&

Rolle77
31.08.2008, 21:13
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

Sauerbruch
31.08.2008, 22:18
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...

HeSt
20.09.2008, 19:49
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

Sauerbruch
20.09.2008, 20:38
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?

HeSt
21.09.2008, 09:40
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?

Sauerbruch
21.09.2008, 11:41
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
=P~ ). 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

HeSt
21.09.2008, 16:43
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 :-s

noch was:
ich logge mich ein, schreibe die antwort und beim abschicken muss ich mich erheut einloggen und meine antwort ist futsch!! :evil:
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?

Sauerbruch
21.09.2008, 17:01
Hallo Heinz,

das mit dem "ausloggen" ist mir auch schon passiert, besonders wenn ich zwischendurch mal länger nichts an der Antwort geschrieben hatte. Es scheint also hier eine Art Time-Out-Funktion zu geben.

Nachdem ich ca. 25 Jahre auch ausschließlich "konventionelle" Käfer verlötet habe, hat es mich richtig süchtig gemacht auszuloten, was man diesen kleinen MCs alles im Handumdrehen beibringen kann. Allerdings hat mir erst Bascom den Einstieg in diese faszinierende Materie ermöglicht - Sprachen wie Assembler oder C waren mir schlicht zu hoch. Und für meine Feld- Wald- und Wiesenanwendungen reicht Bascom allemal.

Bascom hat auch einen Simulator, in dem man sich Schritt für Schritt ansehen kann, wass wann in welchem Register und mit welcher Variablen passiert.

Und zum flashen benutze ich auch ein anderes Programm, es ist wie Du sagtest: HEX-Datei ist HEX-Datei.

Also, ich würde mir die Demo-Version mal runterladen. Hat als Einschränkung nur, dass man damit Programme nur bis 4kB kompilieren kann. Aber für den Tiny13 ist das ja mehr als genug.

Und auf Fragen gibt´s hier im Forum jede Menge gute Antworten!!

Gruß,

Daniel

HeSt
22.09.2008, 06:57
hallo daniel,

hab mir gestern abend noch bascom runter geladen, bin aber noch nicht zum entpacken und studieren gekommen ...
das wird sich im laufe der woche ergeben.

ich bin ebenso fasziniert, was man mit diesen kleinen dingern mit unheimlich wenig hardwaremäßigem aufwand treiebn kann.

also dann, bis zur nächsten fragestunde wenns um bascom geht ;-)

lg heinz

oberallgeier
22.09.2008, 07:49
... fasziniert, was man mit diesen kleinen dingern mit unheimlich wenig hardwaremäßigem aufwand treiebn kann ...Stimmt, genauso fasziniert war ich auch. Immerhin habe ich am tiny13 auf sechs Pinnen, ohne GND und Vcc, 17 (SIEBZEHN) Funktionen. War für mich auch etwas sehr gewöhnungsbedürftig, dass man sich manche Funktionen dann eben Softwaremässig oder per Fuses zurechtstricken muss. Und ebenso gewöhnungsbedürftig war es, dass die Dokumentation (2535G–AVR–01/07) 177 Seiten dick ist. Die wollen ale gelesen und verstanden werden.

Viel Erfolg