Försöker överföra heltal från en ATMega16 till pc:n. Det verkar dock inte gå så bra om man inte konverterar det till text först.
Jag kan alltså inte ta en unsigned char eller en int och föra över direkt utan att ha konverterat det först.
Något förslag?
Överföra heltal?
Binära tal är problematiska om man inte har en helt transparant "kanal".
Olika kontrolltecken (CR, LF o.s.v) kan komma att tolkas av kommunikatins
kanelen och "försvinna" från dataströmmen.
Enklast på processorn är antagligen att skicka det som HEX kod.
Enklast på PC'n är sannolikt BCD eller ASCII.
Eller genom att ställa in PC's serieport så att den släpper igenom allt
(om det går).
Olika kontrolltecken (CR, LF o.s.v) kan komma att tolkas av kommunikatins
kanelen och "försvinna" från dataströmmen.
Enklast på processorn är antagligen att skicka det som HEX kod.
Enklast på PC'n är sannolikt BCD eller ASCII.
Eller genom att ställa in PC's serieport så att den släpper igenom allt
(om det går).
Japp, UART stämmer... borde ha nämt det 
Jag har använt windws hyperterminal men har skrivit ett eget program med vanligt gränssnitt. Detta för att jag ska kunna utföra "debugging" och kunna ändra och läsa värden i realtid.
Just nu för jag över tecken. Datorn kanske begär från uC att skicka över värdet på prescale värdet. Då skickar den ett siffra som anger vilken funktion som ska köras på processorn kollar om den förväntar sig några parametrar för vald funktion o när rätt antal parametrar skickats till uC så skickar den tillbaka till pcn vad den vill veta.
Den skickar en text sträng på med en LF mellan varje värde. Så om prescale bitarna är 101 så skickar den *1\n0\n1* som text.
Konstigt nog så kan jag skicka "ints" till processorn men det blir inte rätt om jag skickar från processor till pc
Sojdan -> hur ställer man in det på att skickas som hex format?

Jag har använt windws hyperterminal men har skrivit ett eget program med vanligt gränssnitt. Detta för att jag ska kunna utföra "debugging" och kunna ändra och läsa värden i realtid.
Just nu för jag över tecken. Datorn kanske begär från uC att skicka över värdet på prescale värdet. Då skickar den ett siffra som anger vilken funktion som ska köras på processorn kollar om den förväntar sig några parametrar för vald funktion o när rätt antal parametrar skickats till uC så skickar den tillbaka till pcn vad den vill veta.
Den skickar en text sträng på med en LF mellan varje värde. Så om prescale bitarna är 101 så skickar den *1\n0\n1* som text.
Konstigt nog så kan jag skicka "ints" till processorn men det blir inte rätt om jag skickar från processor till pc

Sojdan -> hur ställer man in det på att skickas som hex format?
Du måste tänka på att den siffran som du skickar över kommer PCn att tolka om till vad som finns i ASCII-tabellen på den decimala position som din siffra anger. Om din uC vill skicka över siffran 32 kommer Hyperterminalen att skriva ut ett mellanslag.
Okej, jag kanske missuppfattat det här lite nu, men... till att börja med måste du vara medveten om att UART:en skickar över den datan du matar in i den. har du värdet 0x41 i ett register och skickar över, så kommer det fram 0x41 till datorn. PC:n kommer då tolka värdet 0x41 och komma fram till att det är bokstaven A. Vill du ta emot och visa vilket värde det är, och inte vilken bokstav, så måste du ha ett program som tar emot 0x41 och visar det som 0x41 och inte A. Eller eventuellt ställa in hyperterminal att visa hexkoden. Men då kommer ju problemet att du inte kan skriva ut text.
Sen gäller ju även det sodjan talade om tidigare. Skickar du en 32 bitars int som ska in i ett program, så finns det ju risk för att någon av de 4 byten som talet tar upp, kan vara till exempel NULL, CR, LF med mera. Då finns det risk för att datorn tolkar de på något vis. CR så kommer den ju hoppa till början av raden, LF kommer göra så den byter rad etc. Så då måste du återigen göra ett eget program som tolkar datan så som du vill. Eller ställa in hyperterminal på att visa hexkoden för datan som skickas istället.
Ett annat alternativ, som jag tycker är bättre, är att lägga allt sånt här i mikrokontrollern. Altså att mikrokontrollen först skickar ut texten "PRESCALER " och sen där efter tar värdet i registret och gör om det till text, för att sedan skicka ut det och avsluta med CR, CRLF eller vad man nu föredrar.
Sen gäller ju även det sodjan talade om tidigare. Skickar du en 32 bitars int som ska in i ett program, så finns det ju risk för att någon av de 4 byten som talet tar upp, kan vara till exempel NULL, CR, LF med mera. Då finns det risk för att datorn tolkar de på något vis. CR så kommer den ju hoppa till början av raden, LF kommer göra så den byter rad etc. Så då måste du återigen göra ett eget program som tolkar datan så som du vill. Eller ställa in hyperterminal på att visa hexkoden för datan som skickas istället.
Ett annat alternativ, som jag tycker är bättre, är att lägga allt sånt här i mikrokontrollern. Altså att mikrokontrollen först skickar ut texten "PRESCALER " och sen där efter tar värdet i registret och gör om det till text, för att sedan skicka ut det och avsluta med CR, CRLF eller vad man nu föredrar.
chille -> nej du har nog inte missuppfattat 
jag har skrivit om överförringen med hjälp av era kommentarer. Nu kör den nästan lika som förut men det för över det som bytes i stället. Det visade sig att jag jag läste dataströmmen som Strings o det gick ju inget vidare. Inte bara kan jag föra över det jag vill nu, koden vart ca 80% kortare..
Visar sig att det fungerar riktigt bra. Rätt nice att kunna ändra o läsa register och andra variabler i realtid

jag har skrivit om överförringen med hjälp av era kommentarer. Nu kör den nästan lika som förut men det för över det som bytes i stället. Det visade sig att jag jag läste dataströmmen som Strings o det gick ju inget vidare. Inte bara kan jag föra över det jag vill nu, koden vart ca 80% kortare..

Visar sig att det fungerar riktigt bra. Rätt nice att kunna ändra o läsa register och andra variabler i realtid
