PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Atmega mit 4 UART?



cyberexpress
12.10.2010, 09:02
Hallo Leute,

hab wieder mal eine Frage an euch. Bis jetzt kenne ich nur Schaltungen von einem Atmega8L. Der hat die Möglichkeit ein UART zu nutzen. Hätte das mit dem MAX232 gelöst. Wenn ich aber 4 UARTs benötige, was dann?
Auf den Schaltplänen sehe ich immer TxD und RxD auf PD0 und PD1. Könnte ich dort auch andere Pins nutzen für die anderen 3 Seriellen Schnittstellen? Oder benötige ich dann einen anderen Atmega?
Wenn ich einen anderen verwenden muss, welchen würdet ihr empfehlen?
Sind diese dann gleich zu Flashen wie der Atmega8? Oder würde sich an der Schaltung grundlegendes ändern? Und kann man diesen selbst noch löten mit einem selbst geätzten Board?

ich weiß - viele Fragen um ein kleines Ding ;)
Ich hoffe Ihr könnt mir trotzdem auf die Sprünge helfen.

Grüße, CE

oberallgeier
12.10.2010, 09:17
... Wenn ich aber 4 UARTs benötige, was dann ...Die Controller ATmega640, mega1280 und mega2560 - nur beispielsweise - haben vier UARTs. Genaueres wie z.B. Bauform etc. siehe hier (klick). (http://atmel.com/dyn/products/param_table.asp?family_id=607&OrderBy=1250&Direction=ASC#760)

Richard
12.10.2010, 10:54
Unter Bascom kann man Software UARTS auf beliebigen Pin's definieren. Natürlich auch mehrere.....


Do
'first get some data
Serin S , 0 , D , 0 , Mybaud , 0 , 8 , 1
'now send it
Serout S , 0 , D , 1 , Mybaud , 0 , 8 , 1
'................................................. . 1 stop bit
' ^---- 8 data bits
' ^------ even parity (0=N, 1 = E, 2=O)
' ^-------------- baud rate
' ^-------------------- pin number
' ^----------------------- port so PORTA.0 and PORTA.1 are used
' ^--------------------------- for strings pass 0
' ^-------------------------------- variable
Wait 1
Loop


Gruß Richard

cyberexpress
12.10.2010, 15:42
Hallo Richard,

das heißt für mich, dass ich zb. beim Atmega8 auch 4 mal einen MAX232 anbringen kann, sehe ich das richtig? Wenn es in BASCOM geht, kann ich davon ausgehen, dass es auch in C geht?
Weißt du wo man sich beispielcodes dafür ansehen kann?

lg. CE

Vitis
12.10.2010, 16:02
oder sich mal prinzipiell Gedanken über nen Bus machen an dem dann die 4 Teilnehmer hängen.

http://www.rn-wissen.de/index.php/Software-UART_mit_avr-gcc

Richard
12.10.2010, 16:30
http://www.rn-wissen.de/index.php/Software-UART_mit_avr-gcc

Oha, jetzt weiß ich warum ich lieber Bascom verwende...

Serin S , 0 , D , 0 , 38400 , 0 , 8 , 1
Serout S , 0 , D , 1 , 38400 , 0 , 8 , 1

.....ist doch erheblich weniger Tipperei bei der man Fehler machen kann. :-)

Gruß Richard

BastelWastel
12.10.2010, 19:53
Ich schalt mich mal kurz ein, wo hier schon die Profis zum Thema soft UART zusammensitzen.. ;)
Ich werde wohl SERIN und SEROUT auch bald brauchen für nen kleinen Portsniffer, jedoch werd ich aus der hilfe dazu nicht ganz schlau.

Die geben für S einen String an.. (Dim S As String * 10)
Hat SERIN einen eigenen Buffer? Oder muss es ein String sein der dann als Buffer benutzt wird?
Oder wartet der uC an der Stelle im Code bis 10 Byte empfangen wurden?

Vllt kann mich da jemand aufklären der das schon benutzt hat ^^

Cheers

TobiKa
12.10.2010, 20:05
Könntest dich auch mal in Richtung XMega umschauen, die haben bis zu 8 UARTs

TobiKa
12.10.2010, 20:05
Könntest dich auch mal in Richtung XMega umschauen, die haben bis zu 8 UARTs

cyberexpress
12.10.2010, 22:31
Hallo TobiKa,

über die XMega Serie bin ich heute schon gestolpert. Für mich sind Microkontroller eher eine neue Welt. Ich finde Layouts von einem Atmega, damit weiß ich dann schonmal wie der ISP Programmer angebracht wird um das Teil überhaupt mal Programmieren zu können. Das ist auch der Grund warum ich so auf den Atmega8 versteift bin. Funktioniert denn die Programmübertragung bei jedem Microcontroller gleich? (gleiche Pins mit gleichen Pins des ISP zu verbinden?)

Gleiche PINs den Quarz anzubringen? Oder hat das keine Norm und ist bei jedem Controller grundlegend anders?


lg. CE

Richard
13.10.2010, 07:48
Ich schalt mich mal kurz ein, wo hier schon die Profis zum Thema soft UART zusammensitzen.. ;)
Ich werde wohl SERIN und SEROUT auch bald brauchen für nen kleinen Portsniffer, jedoch werd ich aus der hilfe dazu nicht ganz schlau.

Die geben für S einen String an.. (Dim S As String * 10)
Hat SERIN einen eigenen Buffer? Oder muss es ein String sein der dann als Buffer benutzt wird?
Oder wartet der uC an der Stelle im Code bis 10 Byte empfangen wurden?

Vllt kann mich da jemand aufklären der das schon benutzt hat ^^

Cheers

Das ist halt ein Beispiel, es geht auch anders..

'---------------------------------------------------
' (c) 2000-2003 MCS Electronics
' OPEN.BAS
' demonstrates software UART
'---------------------------------------------------
$crystal = 8000000 'change to the value of the XTAL you have installed
$regfile = "m88def.dat"

Ucsr0b = 0 'disable the HW UART

Dim B As Byte

'Optional you can fine tune the calculated bit delay
'Why would you want to do that?
'Because chips that have an internal oscillator may not
'run at the speed specified. This depends on the voltage, temp etc.
'You can either change $CRYSTAL or you can use
'BAUD #1,9610

'In this example file we use the DT006 from www.simmstick.com
'This allows easy testing with the existing serial port
'The MAX232 is fitted for this example.
'Because we use the hardware UART pins we MAY NOT use the hardware UART
'The hardware UART is used when you use PRINT, INPUT or other related statements
'We will use the software UART.
Waitms 100

'open channel for output
Open "comd.1:19200,8,n,1" For Output As #1
Print #1 , "serial output"


'Now open a pin for input
Open "comd.0:19200,8,n,1" For Input As #2
'since there is no relation between the input and output pin
'there is NO ECHO while keys are typed
Print #1 , "Number"
'get a number
Input #2 , B
'print the number
Print #1 , B

'now loop until ESC is pressed
'With INKEY() we can check if there is data available
'To use it with the software UART you must provide the channel
Do
'store in byte
B = Inkey(#2)
'when the value > 0 we got something
If B > 0 Then
Print #1 , Chr(b) 'print the character
End If
Loop Until B = 27


Close #2
Close #1


'OPTIONAL you may use the HARDWARE UART
'The software UART will not work on the hardware UART pins
'so you must choose other pins
'use normal hardware UART for printing
'Print B


'When you dont want to use a level inverter such as the MAX-232
'You can specify ,INVERTED :
'Open "comd.0:300,8,n,1,inverted" For Input As #2
'Now the logic is inverted and there is no need for a level converter
'But the distance of the wires must be shorter with this
End

Gruß Richard

oratus sum
19.12.2010, 22:23
... wobei man auch sagen muss, dass Software UART in der Regel weniger zuverlässig und man sie auch daher nicht mit hohen Datenraten benutzten kann.

(habe ich gelesen)

Ich persönlich habe schon des öfteren Software UARTs verwenden und hatte keine Probleme mit den üblichen Baudraten (9800,19600)

Und natürlich:
Bascom, what else? :-D

Und schon wieder habe ich ein Pro-Bascom Argument gefunden. Wie viel steht es jetzt? Ach das verursacht schon ein Überlauf seitens Bascom :-D

oberallgeier
19.12.2010, 23:17
... habe schon des öfteren Software UARTs verwenden und hatte keine Probleme mit den üblichen Baudraten (9800,19600) ...Üblich? Na ja. Bei meinen Hardware-Uarts ist 57k6 eher Standard, mittlerweile fahre ich über einen FT232/U SB störungsfrei 256k. Höher hatte ich noch nicht probiert. Kommt sicher bei manchen Konfigurationen etwas auf den passenden Quarztakt an.

oratus sum
20.12.2010, 10:04
Wie gesagt habe ich das mal irgendwo gelesen, allerdings noch nie in Erfahrung bringen können.

Die 57k6 halte ich etwas für oversized, ich meine wie viel Daten übträgst du? Außerdem weißt du nicht wie viele Pakete verloren gehen, dazu bekommt man normalerweise keine Auskunft.

Aber 256k, respekt...

oberallgeier
20.12.2010, 12:05
... mal irgendwo gelesen ...Na ja, meine Angaben sind total unfachmännisch, einfach nur die eigene Erfahrung.


... 57k6 halte ich etwas für oversized ...Die Freiheit der eigenen Meinung *ggg*.


... wie viel Daten übträgst du ...Schau mal das Diagramm unten. Messfrequenz: ca. 100 Stützpunkte in weniger als 400 ms für sechs Datensätze - es gibt auch mehr. Als ich anfangs nur zwei, drei Datenströme ausgewertet hatte, z.B. Sprungantwort, war das schon fast zu viel. Daher ist dieses Diagramm - und viele andere, dann doch offline entstanden. Natürlich wäre das auch mit 300 Bd gegangen. Aber wenn viel Tempo praktisch nix kostet dann nutz ich das. Verlorene Datenpakete? Hmmmmm - ne gute Übersicht über die CPU-Auslastung und Kenntnis des zugehörigen Nutzungsspektrums . . . . .

............http://oberallgeier.ob.funpic.de/mMiniD0-dia-25aug09.jpg

hardware.bas
20.12.2010, 15:48
Nach dem Prinzip mit OPEN und CLOSE, wie Richard beschreibt, hatte
ich auch mal einen Atmega8 "aufgebohrt", da ich zu debuggen eine
zusätzliche UART brauchte. Dabei konnte ich keine "Qualitätsunterschiede"
zur Hardware-UART feststellen. Ich glaube jedoch, dass sich mit
dieser Methode auch exotische Datenraten und -protokolle erzeugen
lassen. VG Micha