versuche verzweifelt den RX-Interrupt auszulösen und das geht nicht. erste messungen an der leitung ergaben ein periodisches Signal (siehe jpg) Hardwarefehler, normal, oder was? kann mir jemand weiterhelfen?
Wie weit ist die Störspg. von GND entfernt? Volt?
Ist der Pin auch auf Input geschaltet oder gar auf ausgang und gibt eine o aus?
merkwürdiger weise ca (-!)6V. beim senden liegt das lowlevel auch bei -6V, klappt aber problemfrei (allerdings keine schwingung vorhanden)
im UCSR0B-register sind rx- und tx-enablebits gesetzt. muss noch separat der port geschalten werden?
Soll der Port ein Eingang sein dann: DDRx = 0 Soll der Port ein Ausgang sein dann: DDRx = 1 Portpin lesen: PINx
ich macht Feierabend. Bis Morgen. Sandmännchen kommt gleich. Gruß
Guten Morgen... Stell mal deinen Schaltplan in den Anhang.
moin moin also ich habe das CAN-Testboard von http://www.kreatives-chaos.com/artikel/can-testboard nachgebaut und grad nochmal gemessen, dass der RX-pin auf hi gesetzt ist, obwohl eigentlich im quelltext derartiges nicht vereinbart wurde. werde mal am code basteln und ma gucken was passiert
hab am code gebastelt und der pegel am TX und RX sind noch bei ca. 4.5V???
Vielleicht hast du den int. Pullup eingeschaltet? In welcher Sprache programmierst du?
.asm bin erst seit ca. 14 tagen dabei, int. pullup?
Z.B: DDRB = 0x00 ;Datenrichtungsregister B als Eingang PORTB = 0xFF ;Alle internen Pullup's einschalten Interne Pullup's benutzt man dann, wenn man einen eingang auf low testen will und keinen ext. Widerstand hat. z.B. ein Taster nach Masse: Gedrückt = low nicht gedrückt = high Zum ausschalten des P.U. : PORTB = 0x00
Häng mal dein Programm in den Anhang Hast du Skype?
ich benutze avr studio... titel und kommentare sind noch nicht aktualisiert.
Das "sei" darfst du nicht in die Interruptroutine setzen. Sondern nach der Initialisierun in die main Schleife. So wie jetzt wird der globale Interrupt nicht freigegeben und folglich die Int.Rut. nicht ausgeführt. in main fehlt auch noch : loop: rjmp loop Jetzt wird nach main sofort einmal die Interruptroutine ausgeführt und mangels Rücksprungadresse wieder ein Reset.
Habe dein Programm zu schnell überflogen. Stimmt so nicht ganz was ich geschrieben habe. Die Schleife hast du ja schon drin. Soweit ich mich noch erinnere must du noch den UART Int. freigeben nicht nur den globalen mit sei.
interrupt scheint zu kommen, led geht aus... ;------------------------- .include "m168def.inc" ;| Definitionen der Adressen ;------------------------- ; .def data = r17 .def temp = R16 .equ CLOCK = 7372800 .equ BAUD = 9600 .equ UBRRVAL = CLOCK/(BAUD*16)-1 .org 0x00 rjmp main .org URXCaddr ; Interruptvektor für UART-Empfang rjmp int_rxc ; Hauptprogramm main: ldi temp, LOW(RAMEND) out SPL, temp ldi temp, HIGH(RAMEND) out SPH, temp ldi temp, 0x01 out DDRB,temp out PORTB,temp ; Baudrate einstellen ldi temp, LOW(UBRRVAL) sts UBRR0L, temp ldi temp, HIGH(UBRRVAL) sts UBRR0H, temp ; Frame-Format: 8 Bit ldi temp, 0x06 sts UCSR0C, temp ldi temp, 0x98 sts UCSR0B, temp ; Interrupt bei Empfang ; RX (Empfang) aktivieren sei ; Interrupts global aktivieren loop: rjmp loop ; Endlosschleife ; Interruptroutine: wird ausgeführt sobald ein Byte über das UART empfangen wurde int_rxc: push temp ; temp auf dem Stack sichern ldi temp,0x00 out PORTB, temp pop temp ; temp wiederherstellen reti ; Interrupt beenden
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.