Interrupt Attiny13 & Bascom

Gast #3118795
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
Angehängte Dateien:
#3118842
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.
Gast #3118852
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?
Gast #3118880
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.
(Firma: Manfred) #3118894
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
Gast #3118899
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?
#3118900
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...
Gast #3118903
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?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren