Forum: Mikrocontroller und Digitale Elektronik UART mit CP2102


von Michael H. (h_m)


Angehängte Dateien:

Lesenswert?

Hallo,

ich möchte mit einem Atmega88PA und einem CP2102 USB UART Converter eine 
Verbindung zu dem H-Terminal herstellen.

Von dem Terminal möchte ich ein a zum Kontroller senden und dieser soll 
es wieder zurücksenden. Aber aus irgend einem Grund klappt das nicht, 
habe ich den Converter falsch angeschlossen oder bei dem Terminal etwas 
falsch eingestellt (Bild) ? COM3 stimmt jedenfalls

könnte mir bitte jemand weiterhelfen.

1
/* Funktionen zum Senden und Empfangen eines Bytes im Polling
2
* Ein empfangenes Zeichen wieder senden und am PortB ausgeben * Pinbelegung der UART-Schnittstelle: Tx = PD1, Rx = PD0
3
* Controller: ATmega88 @ 16MHz Quarz extern
4
*/
5
#include <avr/io.h>
6
7
#define FOSC 16000000                // Set clock Speed in Hz
8
#define BAUD 9600                   // Set baud rate
9
#define UBRR_Value FOSC/16/BAUD-1   // Set baud rate value in baud rate register
10
11
void USART_Init( uint16_t ubrr)
12
{
13
  UBRR0H = (uint8_t)(ubrr >> 8);        // Set baud rate in high- and low-register
14
  UBRR0L = (uint8_t)ubrr;             // Set low-register always after high-register
15
  UCSR0C = (1<<UCSZ01)|(1<<UCSZ00);   // Set frame format: 8data, 1stop bit
16
  UCSR0B = (1<<RXEN0)|(1<<TXEN0);     // Enable receiver and transmitter
17
}
18
19
void USART_Transmit(uint8_t data)
20
{
21
  while ( !( UCSR0A & (1<<UDRE0)) );    // Wait for empty transmit buffer
22
  UDR0 = data;                        // Put data into buffer, sends the data
23
}
24
25
uint8_t USART_Receive(void)
26
{
27
  while ( !(UCSR0A & (1<<RXC0)) );  // Wait for data to be received
28
  return UDR0;                        // Get and return received data from buffer
29
}
30
31
/**** Flush Receive-Buffer (entfernen evtl. vorhandener ungültiger Werte) ****/
32
void USART_Flush(void)
33
{
34
  uint8_t dummy;
35
  while (UCSR0A & (1<<RXC0))
36
  dummy = UDR0;
37
}
38
39
int main( void )
40
{
41
  uint8_t data;
42
  USART_Init(UBRR_Value);     // Init UART
43
  USART_Flush();              // Flush Receive-Buffer
44
  DDRB = 0xFF;                // alle PINs an PortB als Ausgänge
45
  
46
  while(1)
47
  {
48
    USART_Transmit(data = USART_Receive());     // receive on byte, send it
49
    PORTB = data;                               // and write to Port B
50
  }
51
}

: Verschoben durch Moderator
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Michael H. schrieb:
> könnte mir bitte jemand weiterhelfen.
Vielleicht im richtigen Forum?
1
Forum: Projekte & Code
2
Hier könnt ihr eure Projekte, Schaltungen oder Codeschnipsel vorstellen
3
und diskutieren. Bitte hier keine Fragen posten!


> COM3 stimmt jedenfalls
Hast du das mit einer Brücke zwischen RX und TX am USB-Wandler 
kontrolliert?

Und statt dem hier:
1
    USART_Transmit(data = USART_Receive());     // receive on byte, send it
Geh einfach mal her und sende dauernd ein bestimmtes Zeichen, mach dann 
10ms Puse, sende wieder dieses Zeichen, wieder Pause usw.
Dann kannst du mal testen, ob du wenigstens richtig sendest.

BTW: Mach mal hinter FOSC 16000000 noch ein UL

: Bearbeitet durch Moderator
von Mario M. (thelonging)


Lesenswert?

Hmm. Sollten die gesendeten Zeichen nicht im HTerm-Fenster "Transmitted 
data" auftauchen? Da ist doch grundsätzlich was faul?

von il Conte (Gast)


Lesenswert?

Lothar M. schrieb:
> Vielleicht im richtigen Forum?Forum: Projekte & Code
> Hier könnt ihr eure Projekte, Schaltungen oder Codeschnipsel vorstellen
> und diskutieren. Bitte hier keine Fragen posten!

Ich denke aber schon dass der To hier richtig liegt.
Er stellt hier kein Projekt vor oder Codeschnipsel, sondern hängt
sein 'Geschnipsel' nur als Anhang hier dran weil er davon ausgeht,
(zu recht) dass ihm dadurch besser geholfen werden kann.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

il Conte schrieb:
> Ich denke aber schon dass der To hier richtig liegt
Hier schon, weil "Verschoben durch Moderator" ...

Mario M. schrieb:
> Sollten die gesendeten Zeichen nicht im HTerm-Fenster "Transmitted data"
> auftauchen?
Wenn auf "ASend" gedrückt wurde. Ich nehme lieber die OCConsole als 
Terminal (auch wenn schon ein wenig betagt), da werden die Zeichen 
sofort gesendet. Und das Teil läuft ohne Installation auch vom 
USB-Stick...
https://elmicro.com/de/occonsole.html

: Bearbeitet durch Moderator
von Wolfgang (Gast)


Lesenswert?

Mario M. schrieb:
> Hmm. Sollten die gesendeten Zeichen nicht im HTerm-Fenster "Transmitted
> data" auftauchen?

Nicht wenn du über "Autosend" sendest, nur bei "Enter".

Beitrag #5162788 wurde vom Autor gelöscht.
von BlaBla (Gast)


Lesenswert?

DTR eingeschaltet?

von BlaBla (Gast)


Lesenswert?

Und noch was: bei meinem Rechner gibt es permanent Ärger mit der COM3. 
Besteht seit dem Upgrade von Win7 auf Win10. Vielleicht mal den Port im 
Gerätemanager umstellen.

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.