Skicka RS232 från en AVR

Övriga diskussioner relaterade till komponenter. Exempelvis radiorör, A/D, kontaktdon eller sensorer.
Användarvisningsbild
Gildebrand
Inlägg: 1108
Blev medlem: 8 maj 2009, 21:40:49
Ort: Falun

Skicka RS232 från en AVR

Inlägg av Gildebrand »

Hejsan!
Jag tänkte göra ett kort baserad på Tiny2313 kretsen för att skicka ut kommandon över RS232. Sedan tänkte jag ha 5 knappar på kortet så att vardera knapp får ett eget kommando som ska skickas ut.

Lite funderingar dock. Jag lär väl ha någon krets efter 2313 som själva RS232 porten är ansluten till? Kan ni rekommendera någon?

Skulle det vara avancerat att skriva programvaran till ett sånt här kort?
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Re: Skicka RS232 från en AVR

Inlägg av vfr »

Du behöver en RS232-drivkrets mellan mikrokontrollern och PC:n. T.ex MAX232 eller någon av dess kloner. Sedan behöver du även programmet som mikrokontrollern skall prata med i PC:n.

Jag tycker inte det är svårt. Men å andra sidan så jobbar jag med sånt nästan dagligen. :)

Det är en del att tänka på. Seriekommunikation på mikrokontrollern, seriekommunikation på PC:n, "protokoll" för kommunikationen mm. Är det bara två enheter (PC:n plus en mikrokontroller) så är det lättare. Annars måste man göra någon form av adressering också, men det behöver du inte då. Det lättaste är nog att börja så smått med att läsa och skriva tecken mot Hyperterminalen eller annat liknande program. Sedan bygger man ut det efterhand. Det finns ett antal trådar här tidigare om protokoll och liknande. Kan vara bra läsning.
johano
Inlägg: 1943
Blev medlem: 22 januari 2008, 10:07:45
Ort: Stockholm

Re: Skicka RS232 från en AVR

Inlägg av johano »

Det första viktiga steget är att klocka AVR:en rätt (med en kristall, den interna oscillatorn
är oftast inte tillräckligt exakt för seriekommunikation), nästan allt strul som nybörjare har med
seriekommunikation beror på detta.

/johan
Användarvisningsbild
Micke_s
EF Sponsor
Inlägg: 6741
Blev medlem: 15 december 2005, 21:31:34
Ort: Malmö

Re: Skicka RS232 från en AVR

Inlägg av Micke_s »

En snålvariant istället för MAX232 som du kanske har delar hemma är:

http://www.olimex.com/dev/images/avr-mt-sch.gif

dock fungerar denna bara om det är en riktig rs232 sändare på andra sidan, fast det är det i pc:n.
Jag har kört 115200 bps över denna koppling utan problem.

detta behöver du:
2st 1N4148
4st motstånd
2st transistorer, en PNP och en NPN
1st elektrolyt kondensator
Användarvisningsbild
Gildebrand
Inlägg: 1108
Blev medlem: 8 maj 2009, 21:40:49
Ort: Falun

Re: Skicka RS232 från en AVR

Inlägg av Gildebrand »

Man tackar :)

MAX232 verkar vara kretsen jag sökte efter.

Ska söka lite på forumet och se vad jag kan hitta. Jag torde väl inte vara den första som vill göra något sånt här så det kanske finns någon färdig kod man kan kolla på och lära sig av?

Hade, precis som du sa, tänkt att till en början bara prova den mot HyperTerminal.
sodjan
EF Sponsor
Inlägg: 43249
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Skicka RS232 från en AVR

Inlägg av sodjan »

Jag har MAXa232 kretsar.
2 st MAX232 + 8 1uF kondingar : 50:- inkl frakt.
Maila vid intresse...

> så det kanske finns någon färdig kod man kan kolla på och lära sig av?

Tja, om du kör en AVR med inbyggs USART så blir det ju ingen speciell kod alls.
Bara att konfigurera USART'en så som du vill ha den och börja skicka... :-)
Användarvisningsbild
Micke_s
EF Sponsor
Inlägg: 6741
Blev medlem: 15 december 2005, 21:31:34
Ort: Malmö

Re: Skicka RS232 från en AVR

Inlägg av Micke_s »

seriell komunikationsexempel t.ex.
http://www.windmeadow.com/node/25
Användarvisningsbild
Gildebrand
Inlägg: 1108
Blev medlem: 8 maj 2009, 21:40:49
Ort: Falun

Re: Skicka RS232 från en AVR

Inlägg av Gildebrand »

Sodjan:
Är de för yt eller hålmontering? Kan du rekommendera någon särskild AVR?
sodjan
EF Sponsor
Inlägg: 43249
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Skicka RS232 från en AVR

Inlägg av sodjan »

> Är de för yt eller hålmontering?

Mina MAX232 ? Jag har både DIP och SOIC.
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Skicka RS232 från en AVR

Inlägg av jesse »

Databladet för ATtiny2313 är ju bra att börja med om man ska lära sig UART. T.ex sidan 121, 122 och 125:
ATtiny2313/V
The following simple USART initialization code examples show one assembly and one
C function that are equal in functionality. The examples assume asynchronous opera-
tion using polling (no interrupts enabled) and a fixed frame format. The baud rate is
given as a function parameter. For the assembly code, the baud rate parameter is assumed to be stored in the r17:r16 Registers.

Assembly Code Example(1)

USART_Init:
; Set baud rate
out UBRRH, r17
out UBRRL, r16
; Enable receiver and transmitter
ldi r16, (1<<RXEN)|(1<<TXEN)
out UCSRB,r16
; Set frame format: 8data, 2stop bit
ldi r16, (1<<USBS)|(3<<UCSZ0)
out UCSRC,r16
ret


C Code Example(1)

void USART_Init( unsigned int baud )
{
/* Set baud rate */
UBRRH = (unsigned char)(baud>>8);
UBRRL = (unsigned char)baud;
/* Enable receiver and transmitter */
UCSRB = (1<<RXEN)|(1<<TXEN);
/* Set frame format: 8data, 2stop bit */
UCSRC = (1<<USBS)|(3<<UCSZ0);
}


Note: 1. The example code assumes that the part specific header file is included. For I/O Registers located in extended I/O map, “IN”, “OUT”, “SBIS”, “SBIC”, “CBI”,and “SBI” instructions must be replaced with instructions that allow access to extended I/O. Typically “LDS” and “STS” combined with “SBRS”, “SBRC”, “SBR”, and “CBR”.

More advanced initialization routines can be made that include frame format as parame-
ters, disable interrupts and so on. However, many applications use a fixed setting of the
baud and control registers, and for these types of applications the initialization code can
be placed directly in the main routine, or be combined with initialization code for other
I/O modules.

(s121)
The following code examples show a simple USART transmit function based on polling of the Data Register Empty (UDRE) flag. When using frames with less than eight bits, the most significant bits written to the UDR are ignored. The USART has to be initialized before the function can be used. For the assembly code, the data to be sent is assumed to be stored in Register R16.

Assembly Code Example(1)

USART_Transmit:
; Wait for empty transmit buffer
sbis UCSRA,UDRE
rjmp USART_Transmit
; Put data (r16) into buffer, sends the data
out UDR,r16
ret


C Code Example(1)


void USART_Transmit( unsigned char data )
{
/* Wait for empty transmit buffer */
while ( !( UCSRA & (1<<UDRE)) )
;
/* Put data into buffer, sends the data */
UDR = data;
}



(s 122)
The following code example shows a simple USART receive function based on polling of the Receive Complete (RXC) flag. When using frames with less than eight bits the most significant bits of the data read from the UDR will be masked to zero. The USART has to be initialized before the function can be used.

Assembly Code Example(1)

USART_Receive:
; Wait for data to be received
sbis UCSRA, RXC
rjmp USART_Receive
; Get and return received data from buffer
in r16, UDR
ret


C Code Example(1)

unsigned char USART_Receive( void )
{
/* Wait for data to be received */
while ( !(UCSRA & (1<<RXC)) )
;
/* Get and return received data from buffer */
return UDR;
}

(s 125)
Användarvisningsbild
Gildebrand
Inlägg: 1108
Blev medlem: 8 maj 2009, 21:40:49
Ort: Falun

Re: Skicka RS232 från en AVR

Inlägg av Gildebrand »

Nu är det här ett sidospår från det ursprungliga projektet, (mycket på gång nu) men det får gå under den här tråden ändå.

Det är så att jag skulle behöva skicka ut 4 st COM-portar från en dator, över Ethernet. Jag har kollat på befintliga lösningar för detta, och konstatera att priserna är väldigt höga. Därför tänkte jag att jag skulle kunna hitta på något med en AVR, en Ethernet-krets, några MAX232 och en HD44780 vilket kanske inte är helt nödvändigt men skulle vara snyggt.

Från början hade jag tänkt att jag skulle skapa virtuella COM-portar i datorn som gick ut över ethernet, men kom på att det kanske går att skicka ut det över ethernet direkt istället, jag vinner ju inget på att ha virtuella com-portar. Så datorn kan tex skicka ut "1: Hej" vilket ska säga åt AVRen att skicka ut Hej på com-port 1.

Vad tänker ni spontant?
Användarvisningsbild
Swech
EF Sponsor
Inlägg: 4750
Blev medlem: 6 november 2006, 21:43:35
Ort: Munkedal, Sverige (Sweden)
Kontakt:

Re: Skicka RS232 från en AVR

Inlägg av Swech »

Spontant så får du nog ta en av de större modellerna, misstänker att det spottas
ut en hel del data via Ethernet in i din Ethernetkrets som därefter AVRen kommer att
behöva ta hand om. Misstänker också att det kommer data riktigt fort också :)

Hursomhelst interessant projekt

Swech
sodjan
EF Sponsor
Inlägg: 43249
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Skicka RS232 från en AVR

Inlägg av sodjan »

> Jag har kollat på befintliga lösningar för detta,

Som t.ex ?

> ...och konstatera att priserna är väldigt höga.

Är de ?
Användarvisningsbild
Gildebrand
Inlägg: 1108
Blev medlem: 8 maj 2009, 21:40:49
Ort: Falun

Re: Skicka RS232 från en AVR

Inlägg av Gildebrand »

Swech:

Jag hade tänkt mig en ATMega128, och sedan måste jag väl ha något cacheminne mellan AVRen och Ethernet-krets. Där borde det väl räcka med 32KB, det är ju inga stora mängder data som ska överföras.

Jag har kollat lite på Illuwatars hemsida. Han har gjort ett prototyp-bord baserad kring en ATMega128, och sedan ett add-onkort till det med ethernet-kretsen ENC28J60. Finns mycket att lära där.

Sodjan:

Du får gärna visa vart man kan köpa en sån här enhet billigt.
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Re: Skicka RS232 från en AVR

Inlägg av vfr »

Är det inte bättre att du visar på det du tittat på, och priset istället. Jag tror mer att det var ett ifrågasättande av ditt påstående att priset var högt, utan du ens ger någon referens till att det verkar högt. Hur skall då någon kunna varken hålla med dig eller motsäga dig? :)
Skriv svar