Forum: Mikrocontroller und Digitale Elektronik EICRA mit ATmega128


von Neun-elfer (Gast)


Lesenswert?

Codeauschnitt:

ldi temp3, 0b01000000
out GIMSK, temp3     ;ext int0 aktiviern in General Interupt Mask

ldi temp3, 0b00000011
out EIMSK, temp3     ;ext int0 aktiviern in Ext Interupt Mask

ldi temp3, 0b00001010
out EICRA, temp3    ;ext int0 und int1 aktivieren bei fallender Flanke

sei

loop:

  rjmp loop


Hallo leute,

ich bastele an meiner Diplarbeit und stehe seit ein paar Tagen vor dem
Problem, mit den INterupts, meinen Atmega anzusteuern. Mittlerweile tut
das auch soweit, allerdings habe ich noch ein Problem, zu dem ich keine
Lösung finde:
Wenn ich mit dem EICRA den Interupttrigger auf fallende Flanke setzen
möchte, bekomme ic hvom Compiler folgende Fehlermeldung:

E:\Arbeit\Diplomarbeit\AVR\040617\Timer040621.asm(78) : error :
Illegal argument type or count
Assembly complete with 1 error


Dies passiert, bei egal welcher einstellung. Jetzt triggert er
natürlich auf ein low, d.h. es funzt trotzdem, da bei 8Mhz keiner
shcnell genug den bttonb loslassen könnte, aber es ärgert mich, das ich
das nicht hinkrieg mit dem Register..

Wer kann mir helfen?

Danke

von Sebastian (Gast)


Lesenswert?

Sers,

also wenn man mal F1 drück kommt man in die Hilfe. Da steht dann drin
das der out Befehl für Adressen von 0 bis 61 funktioniert. Laut
Datenblatt ist das Register aber auf Adresse 6A, also leicht
außerhalb.
So wird das also nix.

seb

von Neun-elfer (Gast)


Lesenswert?

Danke für die INfo,

aber wenn ich in meiner Hilfe was gefunden hätte, dann hätte ich mir
auch die Frage her gespart. (ich benutze AVRStudio 4)

Ich habe übrigens gerade nocheinmal nachgesehn und nichts gefunden. Mag
auch an meiner mangelnden Suchqualität liegen, ic hlasse mich gern eines
Besseren belehren.

von Sebastian Wille (Gast)


Lesenswert?

Hi!

;Externe Interrupts aktivieren
lds    temp1,EICRA
sbr    temp1, 1<<ISC11 | 0<<ISC10 | 1<<ISC01 | 0<<ISC00
sts    EICRA,temp1

;Int4-Int6: "falling edge"
in    temp1,EICRB
sbr    temp1, 1<<ISC61 | 0<<ISC60
sbr    temp1, 1<<ISC51 | 0<<ISC50 | 1<<ISC41 | 0<<ISC40
out    EICRB,temp1

in    temp1,EIMSK
sbr    temp1, 1<<INT6 | 1<<INT5 | 1<<INT4 | 1<<INT1 | 1<<INT0
out    EIMSK,temp1
in    temp1,EIFR
sbr    temp1, 1<<INTF6 | 1<<INTF5 | 1<<INTF4 | 1<<INTF1 | 1<<INTF0
out    EIFR,temp1

So mache ich das. Wie Du siehst verwende ich "out" bei EICRB, aber
"sts" bei EICRA.

Das liegt an dem Problem, was Sebastian schon angesprochen hatte -->
OUT geht nicht überall. War für mich aber auch erst verwirrend!
Theoretisch kann man immer STS verwenden, muß dann aebr 63 oder so
immer dazuzählen bei den sonst OUT-Befehlen.

Also: Probier's mal mit STS anstatt OUT!

Sebastian

von Neun-elfer (Gast)


Lesenswert?

Thanx Sebastian,

das ist genau was ich suchte. Habe STS in der Hilfe gefunden, war mir
aber nicht klar über die Anwendung... bin noch recht blutiger
Anfänger.

Danke

Torsten

von Sebastian Wille (Gast)


Lesenswert?

Hi Torsten,

gern geschehen!

Über LDS und STS kannst Du auch auf die 4KB SRAM zugreifen. Da kannst
Du z.B. "Variablen" abspeichern, falls die Register nicht mehr
ausreichen.

Sebastian

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.