Hallo zusammen, ich habe hier ein Atmega32 und mit dem möchte ich eine kleine Steuerung realisieren und zwar in Assemblersprache. Es sind 6 Schalter, die abgefragt werden, ob die geschlossen oder offen sind. für jeden Schalter ist eine LED vorgesehen. wenn der Schalter offen ist, muss die LED blinken und wenn der Schalter geschlossen ist muss die LED permanent leuchten. man kann mit dem Timer0 die Blinkfunktion realisieren, die wird am PB3(OC0) ausgegeben, das kann ich in ein Unterprogramm unterbringen und immer wieder aufrufen lassen. die 6 LED sind an PortA angeschlossen. Nun ist meine Frage, wie kann ich das Signal(Rechteck), das am PB3 ausgegeben wird zum PortA weiter leiten? für jeden Tipp wäre ich dankbar mfg kaveh .include"m32def.inc" rjmp main .def temp=r16 main: ldi temp,high(ramend) out sph,temp ldi temp,low(ramend) out spl,temp sbi portb,3 ;PB3 (OC0) ;Timer0 init LOOP: ldi temp,0b00010101 ;vorteiler 1024 out TCCR0,temp ldi temp,ob00000010 out TIMSK,temp rjmp LOOP wie kann ich dem Controller sagen, er solle das, was am portb.3 passiert an prorA0 bis portA5 weiter leiten?
Es ist bestimmt nicht nötig, den Timer0 innerhalb einer Schleife (LOOP) zu initialisieren. Es kann sogar der Programmfunktion schaden. > LOOP: ldi temp,0b00010101 ;vorteiler 1024 > out TCCR0,temp Halbwegs OK ist, dass du wenigstens im Kommentar hingeschrieben hast, was du machen willst. > ldi temp,ob00000010 > out TIMSK,temp Leider ist das hier schon nicht mehr der Fall. Jemand der das kontrollieren mächte, kommt ohne Datenblatt nicht aus. Du machst es anderen (und dir) unnötig schwer. Einfacher lesbar und portabler ist es, wenn du mit den Techniken aus Bitmanipulation und den symbolischen Namen für die betreffenden Bits arbeitest, die Atmel dafür definiert hat. > sbi portb,3 ;PB3 (OC0) > ... > ldi temp,ob00000010 > out TIMSK,temp Wenn die vierte Zeile einen Timerinterrupt anschaltet (was ich zu faul bin im Datenblatt nachzuschlagen), ist das Toggeln an PORTB.3 in Zeile 1 nur das Ergebnis eines sich wiederholenden RESET des AVR, weil die zugehörige ISR fehlt. Wenn ich gerade über spanische Dörfer schreibe, lies das AVR-Tutorial über den Timer und über Interrupts.
Hi, ich denke, ich habe mein problemm ziemlich deutlich beschrieben. es geht hier nicht um Timer0 sondern darum wie ich das toggel-signal am portb.3 auf den PortA umleiten kann. die Tatsache ist, wenn ich Timer0 so programmiere: Im TCCR0-Register WGM00=0 , WGM01=0 (non-pwm Mode) und im TIMSK-Register OCIE0=1 setze, dann habe ich am Ausgang PB3 (pin4) eine Rechtecksignal und wenn ich eine LED dort anschließe, dann blinkt diese LED mit CLK/1024 in diesem Fall weiter. Aber ich will die LED nicht an diesem Port anschließen snodern an z.b portA.0 oder portA.1 meine Frage war, wie ich das machen kann und nicht wie ich eine Timer und interrapt programieren kann? mfg kaveh
> im TIMSK-Register OCIE0=1 setze, dann habe ich am Ausgang PB3 (pin4) eine Rechtecksignal. logisch: wie schon gschrieben, wenn Du OCIE0 aktivierst und du den Interrupt nicht anspringst, gibt es einen Reset. Eigntlich nicht mal das, der Controller springt die ersten Male an die Adresse im Flash, welche ich der Interrupttabelle eben für den OCIE0 angegeben ist (steht im Datenblatt). Selbst wenn zufällig an dieser Stelle ausführbarer Code vorliegt, und eine halbwegs sinnvolle Abbarbeitung des Codses ausgegangen werden kann, fehlt "RETI" und der Stack läuft irgendwann über. DANN aber gibt es wirklich einen Reset, also spätestens jetzt. Um deine LED am OC0 blinken zu lassen, ist NICHT notwendig, den OCIE0 zu aktivieren. Das brauchst Du erst - und damit kommen wir auf deine Frage zu sprechen - wenn die LED an einem anderen Protpin wackeln soll. Im OCIE0 Inetrrupt schatest Du den Portpin um, an welchem die LED jetzt hängen soll. Dazu brauchst Du eine Interrupteinsprungtabelle und eine korresponiderende Routine, die mit RETI abgeschlossen ist. Schreibfehler behalten, bitte - bin mobil
Hi >wie kann ich dem Controller sagen, er solle das, was am portb.3 passiert >an prorA0 bis portA5 weiter leiten? Wie jetzt? ein Bit nach sechs Bits? MfG Spess
Kaveh Deiport schrieb: > portA.0 oder portA.1 meine Frage war, wie ich das machen kann und nicht > wie ich eine Timer und interrapt programieren kann? du arroganter trottel genau das willst du wissen
Hallo nochmal, fu schrieb: > Kaveh Deiport schrieb: >> portA.0 oder portA.1 meine Frage war, wie ich das machen kann und nicht >> wie ich eine Timer und interrapt programieren kann? > du arroganter trottel genau das willst du wissen ich habe mir überlegt, ob ich Dir über das, was Du mir oben als Antwort in Deinem sehr "fachlichen Kommentar" geschrieben hast, etwas sagen sollte. es tut mir aber Leid, da fehlt mir auf der schnelle garnicht. weiß Du, es ist nämlich so, dass selten mit solchen idioten wie Dir kommuniziere. Ich kann Dir nur sagen, wenn Du vom etwas keine Ahnung hast, dann hält einfach Dein Maul. in dem Sinne kaveh PS: Mein Dank geht an die anderen, die eine vernüftige Antwort geschrieben haben
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.