Forum: Mikrocontroller und Digitale Elektronik UART, DC/DC-Stromversorgung und USB-Wandler


von A. S. (rava)


Lesenswert?

Hi,

ich möchte einen atmega über UART mit dem PC verbinden, habe aber keinen 
COM-Port. Daher wird ein USB-Interface nötig.

Möglichkeit 1:
http://www.mikrocontroller.net/wikifiles/9/91/Usb_io_expander_layout_usb_sch.png
Vorteil: Galvanische Trennung
Nachteile:
- FT232 nicht auf die Schnelle in München kaufbar
- Teileauswahl nicht ganz klar (Optokoppler, DC/DC)
- SMD (nicht wirklich tragisch)

Möglichkeit 2:
http://www.conrad.de/ce/de/product/197326/MINI-USB-TO-UART-CONVERTER/SHOP_AREA_17348
Vorteil: DIL
Nachteile:
- teuer
- Galvanische Entkopplung unklar:
-- Kann ich meinen uC währenddessen über ein Programmierkabel verbinden?
-- Dann also Massen und Grounds von UART und SPI verbinden? Klingt 
gewagt.
-- Ich versorge meinen uC über Trafo & 7805. Auch verbinden?


Welche Möglichkeiten habe ich noch?
Ein funktionierendes Handykabel liegt hier nicht rum!

von Detlev T. (detlevt)


Lesenswert?


von Christian R. (supachris)


Lesenswert?

Klar kannst du die Massen verbinden. Galvanische Trennung ist nur nötig, 
wenn du an 230V direkt arbeitetst, zum Beispiel mit einem 
Kondensator-Netzteil oder sowas. Wenn du da einen Trafo hast, ist das 
kein Problem. Wichtig ist nur, dass du die Masse auch auf beiden Seiten 
anschließt. Sonst lautet deine nächste Frage, wieso der COM Port nur 
geht, wenn das Programmierkabel steckt.

von Michael (Gast)


Lesenswert?

A. S. schrieb:
> Welche Möglichkeiten habe ich noch?
Auf galvanisch Trennung bei 1) kannst du normalerweise verzichten.

A. S. schrieb:
> -- Kann ich meinen uC währenddessen über ein Programmierkabel verbinden?
Warum nicht. Solange du dir einig bist, woher die Versorgungsspannung 
für den µC kommt. Was soll sich da ins Gehege kommen, wenn du die 
Grounds verbindest. Falls du in deiner Schaltung größere Ströme 
schaltest oder wenn empfindliche Analogelektronik dabei ist, solltest du 
dir allerdings Gedanken um ein sauberes Massekonzept machen..
Aber wozu? Lade einen Bootloader in den µC und schick das Programm über 
die Serielle Schnittstelle rüber.

von A. S. (rava)


Lesenswert?

ah okay, das sind gute Nachrichten! War mir nicht ganz sicher, wie die 
Spannungswandler im PC arbeiten. Schließlich sind am Ende LTP-Programmer 
UND USB mit meinem uC verbunden.

Was gibt es denn für Alternativen zum FT232? Wie gesagt: den müsste ich 
bestellen.

von Tom (Gast)


Lesenswert?

Mit dem myUSBtoUART hast du alles fertig für eine serielle Verbindung 
zum µC

http://shop.myavr.de/Bauelemente%20und%20Controller/myUSBtoUART.htm?sp=article.sp.php&artID=200024

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Es gibt in jedem Computerladen für ein paar Euro USB auf RS232 Adapter. 
Damit brauchst du auf der AVR Seite höchstens einen MAX232 oder im 
simpelsten Falle 2 inverter , gerne auch aus 2 Transistoren.

von A. S. (rava)


Lesenswert?

danke für die vielen Tipps.

Ich muss aber nochmal fragen: aus dem USB-Modul vom C kommen ja 5V 
heraus. Und diese 5V mit dem Ausgang des 7805 auf meiner Platine zu 
verbinden erscheint mir seltsam.
Ich habe oben in der Hektik "Masse und Ground" geschrieben, wollte aber 
auf das VCC heraus.

Hängen die 5V aus dem Modul also in der Luft und nur die Massen sind 
verbunden?

von Stryker (Gast)


Lesenswert?

A. S. schrieb:
> Hängen die 5V aus dem Modul also in der Luft und nur die Massen sind
> verbunden?

Korrekt.

von Stryker (Gast)


Lesenswert?

A. S. schrieb:
> Hängen die 5V aus dem Modul also in der Luft und nur die Massen sind
> verbunden?

Du könntest aber auch den 7805 weglassen und die Versorgung direkt vom 
USB Wandler holen...

von A. S. (rava)


Lesenswert?

hmnein - ich gehe davon aus, dass meine Anwendung (Lötofensteuerung nach 
Thomas Pfeifer) auch stand-alone genutzt wird. Also 5V baumeln lassen.
Firma dankt!

von A. S. (rava)


Lesenswert?

so ich muss diesen Thread mal wiederbeleben. Habe nun alle Hardware da. 
Hab's aber nicht geschafft, die Verbindung herzustellen.
Der Anschluss, die Fuses und die Treiberinstallation sind korrekt. Ich 
verwende einen CP2102 (Aus Möglichkeit 2 vom C - es musste einfach 
schnell gehen).


hier mal mein aktuelles programm (eben abgewandelt von Thomas Pfeifer)
--> kleinstes (nicht)laufendes Beispiel
1
#include <avr/io.h>
2
#include <stdio.h>
3
#include <stdlib.h>
4
5
#define BAUD 4800
6
#define F_CPU 8000000
7
#include <util/setbaud.h>
8
9
10
#ifdef oldgcc
11
  #include <avr/delay.h>
12
#else
13
  #include <util/delay.h>
14
#endif
15
16
void adcinit();
17
int getadc(uint8_t channel);
18
void waitms(int ms);
19
void error();
20
void control(int t_ist, int t_soll);
21
int updateProfile(int t);
22
23
int profile_t[10];
24
int profile_T[10];
25
26
static int uart_putchar(char c)
27
//############################################################################
28
{
29
  if (c == '\n')
30
    uart_putchar('\r');
31
  //Warten solange bis Zeichen gesendet wurde
32
  loop_until_bit_is_set(UCSRA, UDRE);
33
  //Ausgabe des Zeichens
34
  UDR = c;
35
  return (0);
36
}
37
38
void UART_Init (void) {
39
  //Enable TXEN im Register UCR TX-Data Enable
40
  UCSRB=(1 << TXEN);
41
  //Teiler wird gesetzt (setbaud.h)
42
   UBRRH = UBRRH_VALUE;
43
   UBRRL = UBRRL_VALUE;
44
45
46
47
#ifdef oldgcc
48
  //öffnet einen Kanal für printf (STDOUT)
49
  fdevopen (uart_putchar, NULL, 0);
50
  static int uart_putchar(char c, FILE *stream);
51
#else
52
  static FILE mystdout = FDEV_SETUP_STREAM(uart_putchar, NULL,_FDEV_SETUP_WRITE);
53
  stdout = &mystdout;
54
#endif
55
}
56
57
58
59
int main (void) {
60
  UART_Init();
61
  while(1)
62
    printf("ok\n");
63
}

Ich benutze also das HyperTerminal (nur weiß ich nicht, ob ich erst das 
HT oder erst den ATMEGA starten soll) und erstelle eine Verbindung mit 
der entsprechenden COM-Nummer:
4800 bits pro Sekunde
8 Datenbits
keine Parität
1 Stoppbit
Flusssteuerung Hardware
der Treiber des USB-Wandlers ist identisch eingestellt.


in der Zeile:
"  static FILE mystdout = FDEV_SETUP_STREAM(uart_putchar, 
NULL,_FDEV_SETUP_WRITE);"
erhalte ich eine Warnung
"../Laminator.c:66: warning: initialization from incompatible pointer 
type"


wie dem auch sei. Im Terminal kommt nichts an. Ich hätte da ständig 
"ok"s erwartet. Was fehlt?
Die Verbindung ist ja sofort offen, wenn ich das richtig sehe.

Im Treiber könnte ich den FIFO-Puffer deaktivieren wenn ich keinen 
16650-kompatiblen UART habe?

von Ste M. (joker)


Lesenswert?

Hallo,

http://www.watterott.com/de/Breakout-Board-mit-FT232RL-USB-Seriell-Wandler

Das Modul ist in einigen meiner Projekte (roboter, entwicklungsumgebung) 
mit erfolg verbaut und funktioniert einwandfrei und zuverlässig.

Gruss und guten rutsch
Stefan

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.