Hi! Bin ein Neuling betreffend µCs. Wollte bei meinem Atmega8 mit den externen Interrupts experimentieren. Ich verwende das "Atmel Evaluations-Board Version 2.0.1" von Pollin. Code rüberspielen ist kein Problem. Aber da ist noch irgend ein logischer Fehler oder es fehlt irgendetwas. Liegt das am MCUCR? Habe versucht auf "Any logical change on INTx generates an interrupt request" zu stellen -- ISCx1 = 0, ISCx0 = 1. Ich will per Tastendruck eine der zwei LEDs auf dem Board ausschalten. Die Spannungspegel kommen auch am Controller an. Also muss wohl oder übel ein Fehler im Code sein. peinlich :) Hoffe ihr könnt mir helfen! Danke im Voraus Peter
@Sepp: Entprellen ist doch Nebensache, weil ich die LED im Interrupt ja eh nur ausknipse. Oder ist da brauchbarer Code dabei? @Walter: Dachte dafür ist das "sei()"? Danke derweil Peter
Frank wrote: > @Walter: > Dachte dafür ist das "sei()"? das ist für die globale Aktivierung, aber du musst natürlich noch die ext. Interrupts selber enablen...siehe Tut > Danke derweil > Peter wie nun, Frank oder Peter
>@Walter: >Dachte dafür ist das "sei()"? Manchmal ist Denken Glückssache... Guck dir die Register deiner Interrupts an. DA wird irgendein Bit "...Enable" heissen.
das ist das Problem,........ Tasten niemals mit Interrupt entprellen oder Abfragen !! Gibt nur Ärger !! Oder wieviele Interrupts löst Deine Taste aus ?? Die "Nebensache" fängt eben im Detail an !!
@jussa Alles klar, okay danke. "GICR" könnte der richtige Weg sein. Frank war neulich hier an meinem Rechner und ich hab nicht drangedacht, dass ich den Namen noch oben ändern muss. @stephan- Das ist momentan nur zum Debuggen. Da kommt später schon ein sauberer high/low-Pegel von einem IC hin. Bis jetzt hab ich eh nur hardwareseitig entprellt.
Mit "GICR" scheint's zu klappen. Wobei das im Tutorial afaik aber keine Verwendung findet.
Peter wrote: > Mit "GICR" scheint's zu klappen. Wobei das im Tutorial afaik aber keine > Verwendung findet. doch, nur unter anderem Namen
Frank, sag bitte mal dem Peter, er möge sich auch mal das Datenblatt des Atmega8 ansehen. Da steht so ziemlich alles über die I/O-Register drin. ...
Hätte auch eine Frage zum Interrupt, programmiere in Assembler mit dem AtMega16 und irgendwie bekomm ich das nicht hin. Habe BTN7 an PD3 angeschlossen und die LEDS an PD0:3. Ohne Interrupts kann ich die LEDS ganz normal ansteuern, beim Interrupt gibts halt Probleme: .NOLIST .INCLUDE "m16def.inc" .LIST .equ temp, 0x10 .equ leds, 0x11 .section .text .org 0x0000 rjmp main .org INT1addr jmp EXT_INT1 main: ldi temp, lo8(RAMEND) out SPL, temp ldi temp, hi8(RAMEND) out SPH, temp ldi temp, 0x00 out DDRD, temp ldi temp, 0xFF out DDRC, temp ldi temp, 0XFF out PORTD, temp ldi temp, 0b00001000 out MCUCR, temp ldi temp, 0b10000000 out GICR, temp sei infinite_loop: rjmp infinite_loop EXT_INT1: ldi temp, 0XFF out PORTC, temp reti Vielleicht kann mir ja jemand helfen, sitz schon Ewigkeiten herum und mir fällt nichts mehr ein. Lg
Hi
>Ohne Interrupts kann ich die LEDS ganz normal ansteuern, beim Interrupt >gibts
halt Probleme:....
1.Welche?
2. ldi temp, 0b00001000
out MCUCR, temp
ldi temp, 0b10000000
out GICR, temp
Schreibe mal lieber 'ldi tmp, 1<<xyz' Mit der Bitbezeichnung xyz. Ist
sicherer und auch ohne Datenblatt lesbar.
MfG Spess
Stimmt, mit 1<<xyz hast Recht. Problem is halt das die LEDS nicht angehen wenn ich den Button drücke. Scheint sonst der Code in Ordnung zu sein?
Mark Drobnick wrote: > .equ temp, 0x10 > .equ leds, 0x11 > [...] > ldi temp, 0x00 Du solltest Dich vielleicht mal erkundigen, was .equ überhaupt macht! Es macht jedenfalls nicht das, was Du vermutlich denkst... Abgesehen ist das mit dem .equ syntaktisch falsch (und kann deshalb schon mal gar nicht assemblieren).
Ich sehe grad, dass das gar kein AVR-Assembler ist! Womit assemblierst Du das? Mit dem GNU-Assembler?
Habs jetzt hinbekommen, das einzige was ich geändert hab war ein mal zwei bei INT1addr, also ".org INT1addr * 2", weil die vordefinierten Adressen anscheinend Word Format haben und der Assembler Byte haben will. Mit dem assemblieren hatte ich keine Probleme. Wie hätt ich das mit dem .equ besser machen sollen? lg
Assembler dürft avr-as, avr-gcc sein. Musste jetzt selber nachschaun weil wir von der Uni schon ein fertiges Makefile bekommen haben und die ganzen Packages schon installiert waren.
Mark Drobnick wrote: > Assembler dürft avr-as, avr-gcc sein. Dürfte? Toll, da programmiert einer und weiß gar nicht, womit... > Musste jetzt selber nachschaun So, muss ich das?
Sehr nett danke, programmier seit gestern das erste mal einen Microcontroller. Aber sinnlos zu diskutieren, jetzt hab ichs ja eh hinbekommen. Schönen Abend noch!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.