UART-problem i AT 90S8515

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Anders
Inlägg: 13
Blev medlem: 30 juni 2003, 12:19:44
Ort: Gbg
Kontakt:

UART-problem i AT 90S8515

Inlägg av Anders »

Hej.

Har nu försökt få igång UART-kommunikation mellan två 90S8515. Det fungerar hyggligt men jag har ett problem, det är att lysdioderna på mottagarprocessorn verkar ta in störningar.
På sändningsprocessorn kan jag genom en extern knapp välja att den skickar antingen 0xFF eller 0x00. Skickar jag 0xFF börjar lysdioderna på mottagardelen lysa men blinkar ungefär 2 gånger i sekunden.
Sänder jag 0x00 så slocknar de men kan flasha till nån gång emellanåt. Varför lyser inte dioderna med ett fast sken när jag skickar 0xFF och är helt släckta när jag skickar 0x00?
Det verkar som att den sänder rätt värden men flippar ur någon gång i sekunden.
Jag har stirrat mig blind på detta nu och har kört slut på idéer. Nån som har några tankar att komma med?


Koden ser ut så här:

Mottagardel, laddas i ena processorn

Kod: Markera allt

.include "C:\Program\Atmel\AVR Tools\AvrAssembler\Appnotes\8515def.inc"
;.CSEG
.ORG $000
rjmp init


init:
		ldi R16,RAMEND
		out SPL,R16
		ldi R16,0xFF
		out DDRA,R16
		ldi R16,95
		out UBRR,R16
		ldi R16,0b00011000
		out UCR,R16
		clr R16
		;sbi USR,RXC
main:
		sbic USR,RXC
		in R16,UDR
		out PORTA,R16
		rjmp main
Sändningsdel, laddas i den andra processorn

Kod: Markera allt

.include "C:\Program\Atmel\AVR Tools\AvrAssembler\Appnotes\8515def.inc"
;.CSEG
.org $0
rjmp init

init:
		ldi R16,RAMEND
		out SPL,R16
		ldi R16,0b00000011
		out DDRA,R16
		ldi R16,0
		out DDRC,R16
		ldi R16,95
		out UBRR,R16
		ldi R16,0b00011000
		out UCR,R16
		ldi R16,0
		out UDR,R16

main:
		sbic USR,TXC
		call send	
		sbic PINC,PC0
		ldi R16,0xFF
		sbis PINC,PC0
		ldi R16,0
		rjmp main

send:	
		out PORTA,R16
		sbi USR,TXC
		out UDR,R16
		ret

p.s. vad är skillnaden mellan UART och USART?
Användarvisningsbild
PaNiC
Inlägg: 2566
Blev medlem: 15 augusti 2003, 22:16:15
Ort: Skånelandet

Inlägg av PaNiC »

Ajaj... Du har båda knapparna till samma pin (Portc,0) och driver den hög eller låg momentant med knapparna. Den pinnen lämnas således flytande när ingen knapp är nertryckt. Då kan du få sådana här skumma fenomen.

Sätt knapparna på var sin pinne och använd pullup eller pulldown-motstånd så borde det funka :).
Användarvisningsbild
Hedis
Inlägg: 2490
Blev medlem: 8 december 2003, 15:10:44
Ort: Vänersborg
Kontakt:

Inlägg av Hedis »

Nja, det är nog något annat problem du har.
Efterssom den enbart är flytande när du inte trycker på någon knapp alls så påverkar det inte funktionen när du håller knappen helt nertryckt.

Så något annat är det som strular.
Men jag håller med Panic om att du inte skall ha den flytande.
Anders
Inlägg: 13
Blev medlem: 30 juni 2003, 12:19:44
Ort: Gbg
Kontakt:

Inlägg av Anders »

Hmm, ska kanske förklara min knappkonstruktion.

Från PORTC,0 har jag en kabel som går ut. Den kabeln sätter jag till +5v eller jord beroende på vad jag vill sända.
Jord=0x00
+5v=0xFF

Jag har fått tips från en annan här på forumet om att det kan bli struligt om processorerna har gemensam jord. Det är samma spänningsaggregat som driver hela alltet och alla jordanslutningar går ihop efter ett litet tag. Men det finns ingen krets som är direkt sammankopplad med någon annan krets jordpunkt.

Kan mottagardelen ha en felaktig referenspunkt och därför få fel värden på de data som skickas?
Anders
Inlägg: 13
Blev medlem: 30 juni 2003, 12:19:44
Ort: Gbg
Kontakt:

Inlägg av Anders »

Uppdatering.

Nu gjorde jag som så att jag drog gemensam jord och spänning till båda processorerna.
Vid uppstart börjar lysdioderna blinka och bete sig precis som innan. D.v.s när det är något fel. Men efter en stund händer något märkligt, allting stabiliserar sig och dioderna börjar lysa med ett klart sken och förbli på detta vis.

Stunden det tar för systemet att stabilisera sig varierar och jag ser inget mönster i det. Hur länge ligger ett mottaget värde kvar i UDR?
Kan det vara så att det mottagna värdet försvinner efter ett tag och mottagarprocessorn inte hunnit registrera det och då får man det här fenomenet.

/R, ny uppdatering. Det mottagna värdet stämmer inte alltid. Olika dioder börjar lysa vid olika körningar.
Användarvisningsbild
Hedis
Inlägg: 2490
Blev medlem: 8 december 2003, 15:10:44
Ort: Vänersborg
Kontakt:

Inlägg av Hedis »

När du skriver att det stabiliserar sig efter ett tag, är ngn utav knapparna intryckta då?

Dom har gemensam jord även om det är 100m kabel imellan.
Så för att få separerad strömförsörjning så måste ena drivas ifrån batteri, och INGET annat än serie-kommunikations kabeln får förbinda dom.
Användarvisningsbild
EagleSpirit
Inlägg: 1288
Blev medlem: 27 maj 2003, 23:15:48
Ort: Västerås
Kontakt:

Inlägg av EagleSpirit »

du sa att du har samma kabel för två lägen och den skickar hela tiden? Har testat så att kommunikationen funkar som den ska eller är det här första testet? Du kanske ska testa att göra en liten delay mellan varje sändning så att den inte ligger och skickar hela tiden.

Var ställer du in baud och sånt? Jag kan inte AVR assembler så bra.
Användarvisningsbild
Hedis
Inlägg: 2490
Blev medlem: 8 december 2003, 15:10:44
Ort: Vänersborg
Kontakt:

Inlägg av Hedis »

Jag tycker att det ser ut som om han inte använder ngt protokoll lr ngt.
Bara skickar iväg data o skickar ut det helt oarbetat på en port på mottagaren.
Användarvisningsbild
PaNiC
Inlägg: 2566
Blev medlem: 15 augusti 2003, 22:16:15
Ort: Skånelandet

Inlägg av PaNiC »

Hedis:
out UDR,R16 skickar byten till UART. Resten sköter hårdvaran om.

Anders: Varför "sbi USR,TXC" i skicka-rutinen?
Skriv svar