PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PCINT beim Mega88



JungerSpund
04.10.2005, 22:22
Hi

ich möchte mit Bascom auch die Interrupteingänge PCINT1 bis 23 nutzen. Nur wie nutzt man diese Interruptfunktionen der Pins in Bascom? Geht das überhaupt?

Frank
06.10.2005, 17:07
Es gibt dazu ein Demo von MCS. Es funktioniert aber laut MCS nur mit der neusten Bascom-Version



'---------------------------------------------------------------------------
' (c) 1995-2005, MCS Electronics
' PCINT_CHANGE.BAS
' This sample shows how to use the PC interrupts
'---------------------------------------------------------------------------

$regfile = "m88def.dat"
$crystal = 8000000
$baud = 19200

Print "{027}[2J"; ' when you have a terminal emulator, this will clear the screen
Print "Test M88 ints" ' init message

'The M88 and M168 can detect a level change on all port pins.
'We will just check on portB, pins 0-3

Config Portb = Input
Portb = &HF 'activate pull up

Enable Interrupts 'enable global ints
Enable Pcint0 'we enable pcint0 as this has pcint0-pcint7
On Pcint0 Isr_pcint0 'we jump to this label when one of the pins is changed
Pcmsk0 = &B00001111 'enable pcint0-pcint3 (portb.0-portb.3)
'With pcmsk you individual select which pins must react on a logic level
'When you write a 1, the change in logic level will be detected.

Do
nop
'you can do anything here
'But we show how to use the pin level change in manual mode without interrupts
'Say we want to detect logic level change of pin 23, (PINC.0) / INT8
Config Pinc.0 = Input 'you can also detect output changes but we use input
Pcmsk1 = &B00000001 ' enable the bit of PCINT8 which is in PCMSK1
If Pcifr.pcif1 = 1 Then ' change detected
Print "pinc.0 has changed" 'in this case it must be pinc.0
Pcifr.pcif1 = 1 ' write a 1 to clear the flag so we can detect it again
End If
Loop


Isr_pcint0:
Print "Pin change " ; Bin(pcmsk0) ; Spc(3) ; Bin(pinb)
'As you see the mask does not change, so to find out which pin changed,
'you need to read the PINB register.
Return

End

EDatabaseError
05.10.2006, 20:00
Ich habe folgenden Code:


'---[ SET INTERRUPT LOGIC ]-----------------------------------------------------
Sreg.7 = 0

On Int0 Isr_stop
On Int1 Isr_ini
On Int2 Isr_phase_a_edge
On Pcint3 Isr_ini

Eicra = &B00011111
Eimsk = &B00000111
Eifr = &B00000111

Pcicr = &B00001000
Pcifr = &B00001000
Pcmsk3 = &B01010011
Pcmsk2 = &B00000000
Pcmsk1 = &B00000000
Pcmsk0 = &B00000000

Sreg.7 = 1 leider will er den PCINT3 nicht kennen / sagt das er ihn nicht kennt meine BASCOM Version ist die 1.11.8.2 (Vollversion)

tobi

linux_80
05.10.2006, 20:45
Hallo,
der Mega88 hat ja auch nur 3 Ports, die gehen von 0-2 !
Welchen Interrupt Du aktivieren musst, hängt vom Port ab, an dem das gewünschte Pin hängt.

Suche mal nach PCINT, das haben wir vor einiger Zeit mal genauer beschrieben.

EDatabaseError
05.10.2006, 21:12
sry... ich wollte kein neues thema aufmachen habe den mega 644

linux_80
05.10.2006, 22:03
Macht ja nix, das Prinzip ist das gleiche.
Wirf mal die Suche an nach PCINT,
sind gleich die ersten paar Beiträge.

zB:
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=206514#206514
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=199634#199634

EDatabaseError
05.10.2006, 22:07
Also ich hab mal auf 1.11.8.3 geupdated...

IMHO verstehst du das Prob. nicht so ganz ;-)

der ATM 644 hat nen PCINT3 leider kennt bascom diesen interrupt nicht (bild)

Mfg
Tobi

linux_80
05.10.2006, 22:11
Ja,
habs grad gesehen, PCINT3 geht mit der 11.8.3 Demo auch nicht !
Da müssen dann andere Leute was machen, mal bei MCS oder wie die heissen vorbeimailen.

EDatabaseError
05.10.2006, 22:13
joo bei der vollversion tuts eben auch nich *grpf* für was gibt man da geld aus...

gibt es eine möglichkeit das irgentwie mit assembler zu lösen - gibts da was?

mfg
tobi

linux_80
05.10.2006, 22:55
Ich hab was gefunden.
schau mal in die m644def.dat, ganz am Ende sind die Int-Vector-Namen,
und die für den PCINT3 ist falsch geschrieben !!

Wenn man das ändert, schon gehts \:D/

Gento
06.10.2006, 06:35
joo bei der vollversion tuts eben auch nich *grpf* für was gibt man da geld aus...
Wenn das, was Bascom kostet ,Du als Geld bezeichnest :-$ erwartest Du auch 24 Std Hotline ?

Gento

EDatabaseError
06.10.2006, 11:16
Ich hab was gefunden.
schau mal in die m644def.dat, ganz am Ende sind die Int-Vector-Namen,
und die für den PCINT3 ist falsch geschrieben !!

Wenn man das ändert, schon gehts \:D/


WOW! Super Danke! \:D/

Mfg
Tobi \:D/

EDatabaseError
06.10.2006, 11:17
joo bei der vollversion tuts eben auch nich *grpf* für was gibt man da geld aus...
Wenn das, was Bascom kostet ,Du als Geld bezeichnest :-$ erwartest Du auch 24 Std Hotline ?

Gento

ja klar ist im verhältnis billig - borland bds 2006 professional kostet ca. 2000 €

mfg
tobi

linux_80
06.10.2006, 20:07
Hallo,

ich hab das Problem gestern Abend noch ins Forum bei MCS gestellt, und eine Mail an den Support dort geschrieben, und auch schon eine Antwort bekommen, das es im nächsten update repariert wird.
\:D/

EDatabaseError
06.10.2006, 20:09
ich hab auch MCS kontaktiert (gestern) und die selbe antwort bekommen.