Forum: Mikrocontroller und Digitale Elektronik Interrupt Attiny13 & Bascom


von Paul.P (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

nun mal ein bisschen Ausführlicher.... ich habe folgendes Problem...
ich möchte mir einen Würfel basteln... die Hardware ist soweit fertig 
nun habe ich ein Problem mit der Software...

ich möchte nach einem Interrupt, in die ISR Springen... was lauft Bascom 
Simulation auch funktioniert...
wenn ich es aber in meine Schaltung Flashe (Tiny13) passiert dort leider 
nichts...

Software...
Hardware ist mit am Anhang... (nur für den Interrupt)

würde mich über Hilfe freuen...

$regfile = "attiny13.dat"
$crystal = 120000000
$hwstack = 10
$swstack = 10
$framesize = 20

'Config Powermode = Idle

On Int0 Int0service

Config Int0 = Low Level

Enable Int0

Enable Interrupts

Config Portb = Output
Dim Zahl As Byte


Main:


Do

Powerdown

Loop







Int0service:

Portb = &B11101111 '1
Waitms 100
Portb = &B11111111
Waitms 100
Portb = &B11110111 '2
Waitms 100
Portb = &B11111111
Waitms 100
Portb = &B11100111 '3
Waitms 100
Portb = &B11111111
Waitms 100
Portb = &B11110011
Waitms 100 '4
Portb = &B11111111
Waitms 100
Portb = &B11100011
Waitms 100 '5
Portb = &B11111111
Waitms 100
Portb = &B11110001
Waitms 100
Portb = &B11111111

Return

von Paul.P (Gast)


Lesenswert?

Paul.P schrieb:
> $crystal = 120000000

natürlich nur 12 Mhz...

von roadrunner (Gast)


Lesenswert?

120MHz?

von roadrunner (Gast)


Lesenswert?

Aha.

von Michi (Gast)


Lesenswert?

Paul.P schrieb:
> Config Portb = Output
Aha, dein Taster liegt also an einem Ausgang...

von Paul.P (Gast)


Lesenswert?

Michi schrieb:
> Paul.P schrieb:
>> Config Portb = Output
> Aha, dein Taster liegt also an einem Ausgang...

geht das so nicht ?
muss ich etwa Portb.0= Input ?

von Michael S. (mikel_x)


Lesenswert?

Falls dein Taster den INT0 auslösen soll, sollte er lt. DB an PINB.1 
hängen, statt an PINB.0.

Der gesamte PortB wurde als Ausgang definiert. So kann der Taster 
schonmal garnix bewirken, ausser einen Kurzschluss des jeweiligen 
Ausgangs.

Der tiny 13 hat im Normalbetrieb nur 5 Portpins, keine 8... das ist aber 
vernachlässigbar, da die oberen, nichtvorhandenen portbits eh ignoriert 
werden.

von Paul.P (Gast)


Lesenswert?

Michael Sch. schrieb:
> Falls dein Taster den INT0 auslösen soll, sollte er lt. DB an PINB.1
> hängen, statt an PINB.0.
>
> Der gesamte PortB wurde als Ausgang definiert. So kann der Taster
> schonmal garnix bewirken, ausser einen Kurzschluss des jeweiligen
> Ausgangs.
>
> Der tiny 13 hat im Normalbetrieb nur 5 Portpins, keine 8... das ist aber
> vernachlässigbar, da die oberen, nichtvorhandenen portbits eh ignoriert
> werden.

s****e ich sehe es gerade... verdammt... was ist denn PCINTO für eine 
Funktion?

von Laus (Gast)


Lesenswert?

Paul.P schrieb:
> Paul.P schrieb:
>> $crystal = 120000000
>
> natürlich nur 12 Mhz...

Oder doch nur 1,2 Mhz? So wird der Tiny13 geliefert.

von Paul.P (Gast)


Lesenswert?

Laus schrieb:
> Paul.P schrieb:
>> Paul.P schrieb:
>>> $crystal = 120000000
>>
>> natürlich nur 12 Mhz...
>
> Oder doch nur 1,2 Mhz? So wird der Tiny13 geliefert.

Laus schrieb:
> Paul.P schrieb:
>> Paul.P schrieb:
>>> $crystal = 120000000
>>
>> natürlich nur 12 Mhz...
>
> Oder doch nur 1,2 Mhz? So wird der Tiny13 geliefert.

Nein, 12Mhz ist schon richtig.

von Manfred S. (Firma: Manfred) (xfred343)


Lesenswert?

> Falls dein Taster den INT0 auslösen soll, sollte er lt. DB an PINB.1
> hängen, statt an PINB.0.
>


Kein Grund zur Sorge, die Interrupts sind ja frei programmierbar:
1
Ddrb = &B00011110
2
Taster Alias Pinb.0
3
Portb.0 = 1
4
Pcmsk = 1 'damit ist INT0 relevant!!
5
Stop Adc
6
Stop Ac
7
Stop Watchdog
8
Enable Pcint0
9
Enable Interrupts
10
On Pcint0 Int0service

von Paul.P (Gast)


Lesenswert?

Manfred S. schrieb:
>> Falls dein Taster den INT0 auslösen soll, sollte er lt. DB an PINB.1
>> hängen, statt an PINB.0.
>>
>
>
> Kein Grund zur Sorge, die Interrupts sind ja frei programmierbar:Ddrb = 
&B00011110
> Taster Alias Pinb.0
> Portb.0 = 1
> Pcmsk = 1 'damit ist INT0 relevant!!
> Stop Adc
> Stop Ac
> Stop Watchdog
> Enable Pcint0
> Enable Interrupts
> On Pcint0 Int0service


das ist der erste Beitrag der wirklich hilft... danke...
nur spielt er meine Interrupt Routine nicht richtig durch wie ich 
erhoffte?!
es sollte jede Zahl ca. 100ms angezeigt werden?

von Michael S. (mikel_x)


Lesenswert?

INT0 ist ein einzelner, pin-gebundener Hardwareint. mit der 
zweithöchsten Priorität nach den Reset-Ints.

PCINT0 ist (von INT0 völlig unabhängig) der gemeinsame, sog. 
Pinchange-Int. der für alle im PCMSK-Register aktivierten Eingänge einen 
Sammelinterrupt auslöst. Welcher Eingang konkret und mit welcher Flanke 
den PCINT0 ausgelöst hat, muss innerhalb der ISR diskret abgefragt 
werden.

Also:
Taster an PB.1
DDRB = &B011101  (PB.5 und PB.1 als Eingänge, der Rest als Ausgänge)

Oder:
Falls du die Harware nicht mehr ändern kannst, musst du eben alternativ 
den PCINT0 für PinB.0 aktivieren und zumindest eine Flankenerkennung (1 
-> 0) an den Anfang der ISR setzen...
Das obligatorische Entprellen von Tastern kannst du dir angesichts der 
reichlichen "waitms" in der ISR schenken.... ausnahmsweise... ;-)

Eine ISR mit sovielen waits zu befrachten, ist keine gute Lösung. Zum 
testen und weiterentwickeln der ersten Ansätze und für ein erstes 
Erfolgserlebnis, kannst du es mal vorerst so machen...

von Paul.P (Gast)


Lesenswert?

> Oder:
> Falls du die Harware nicht mehr ändern kannst, musst du eben alternativ
> den PCINT0 für PinB.0 aktivieren und zumindest eine Flankenerkennung (1
> -> 0) an den Anfang der ISR setzen...
> Das obligatorische Entprellen von Tastern kannst du dir angesichts der
> reichlichen "waitms" in der ISR schenken.... ausnahmsweise... ;-)
>
> Eine ISR mit sovielen waits zu befrachten, ist keine gute Lösung. Zum
> testen und weiterentwickeln der ersten Ansätze und für ein erstes
> Erfolgserlebnis, kannst du es mal vorerst so machen...

du scheinst mal wirklich einer zu sein der richtig Ahnung hat, 
programmierst du selber mit Bascom?

von Michael S. (mikel_x)


Lesenswert?

Im Leben gibt es nur Lehrlinge, die mehr oder weniger schnell aus den 
eigenen Fehlern lernen. Ich gehöre da sicher nicht zur Elite... ;-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.