UART, DC/DC-Stromversorgung und USB-Wandler

OP #2444730
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!
#2444738
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.
Gast #2444743
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.
OP #2445502
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?
OP #2477711
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?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren