Interface från PiC till persondatorns comport...
- grapetonix
- Inlägg: 293
- Blev medlem: 14 juli 2004, 17:20:50
- Skype: grapetonix
- Ort: Hägersten, Stockholm
Så, hur bitbangar man på ett bra sätt?
Hur funkar clocksynkningen vad gäller serieportar?
Om man ställt inporten på PC'n till 9600 baud, måste man då pumpa den @ ungefär prick 9600 baud eller går det fint att pumpa den mycket långsammare? Beror hastigheten på start-stop bitarnas längd eller hur ser alltsammans ut?
Hur funkar clocksynkningen vad gäller serieportar?
Om man ställt inporten på PC'n till 9600 baud, måste man då pumpa den @ ungefär prick 9600 baud eller går det fint att pumpa den mycket långsammare? Beror hastigheten på start-stop bitarnas längd eller hur ser alltsammans ut?
-
- Inlägg: 2360
- Blev medlem: 16 september 2003, 17:18:13
- Ort: Dubai, United Arab Emirates
- Kontakt:
Du måste normalt hålla dig inom +-2% av nominell hastighet, annars så kan sändare och mottagare fasa ur. Eftersom det inte finns några klockpulser så måste man ha samma timing på båda sidorna. Småfel "nollställs" ju genom att startbitten fungerar som en synkronisering.
Enkelt sett så väntar den mottagande UART'en på att startbitten genom att vänta på att linjen ska gå +12 volt. Den delayar då i en halv bitperiod (för att komma "mitt i" varje puls) och kollar att det fortfaranre är +12, då är det en valid startbot och inte bara en glitch.
Därefter så delayar den en hel bitperiod och läser in den första databiten. Detta upprepas 7 gånger till så att hela byten har lästs in.
Sist så kollar den efter att stop-bitten verkligen kommer, annars är det något som är fel.
Enkelt sett så väntar den mottagande UART'en på att startbitten genom att vänta på att linjen ska gå +12 volt. Den delayar då i en halv bitperiod (för att komma "mitt i" varje puls) och kollar att det fortfaranre är +12, då är det en valid startbot och inte bara en glitch.
Därefter så delayar den en hel bitperiod och läser in den första databiten. Detta upprepas 7 gånger till så att hela byten har lästs in.
Sist så kollar den efter att stop-bitten verkligen kommer, annars är det något som är fel.
- grapetonix
- Inlägg: 293
- Blev medlem: 14 juli 2004, 17:20:50
- Skype: grapetonix
- Ort: Hägersten, Stockholm
Hm, jag vet inte om jag fått något om bakfoten. Men det ser ut som om vissa picar har högnivå som standard i UARTen (nolla/ingen data) - kolla sid 105 i databladet för exempelvis min favorit 16F88.matseng skrev:Dock så fungerar det nog bara i picbasic eller om man bitbangar själv eftersom man blir tvungen att invertera signalen för att nollorna och ettorna ska bli rätt.
' Set Debug mode: 0 = true, 1 = inverted
DEFINE DEBUG_MODE 1
Jag har inget minne av att jag sett att man kan invertera via flagga om man använder UART'en, men där kan jag ha fel förståss....
Edit: det var det inte - jag prövade. Verkar bli för mycket strul med det här, Får väl ta och ge upp, jag köper en Max232 och håller truten
Nandgrind lär iofs. fungera för att invertera signalen också. men då är jag fortfarande kvar i cmos-logiknivåer så varför chansa...
- grapetonix
- Inlägg: 293
- Blev medlem: 14 juli 2004, 17:20:50
- Skype: grapetonix
- Ort: Hägersten, Stockholm
Vad jag förstått så går det inte att invertera när man kör via UARTen, därav ännu en anledning till att göra det ordentligt med en MAX232.matseng skrev:Jag har inget minne av att jag sett att man kan invertera via flagga om man använder USART'en, men där kan jag ha fel förståss....
När jag använder PICBasics fusklösning så är det helt mjukvarukontrollerad seriell överföring som gäller, alltså bara för debug och liknande.