Forum: Mikrocontroller und Digitale Elektronik ATMEGA4809 Curiosity Board - Serial in/out?


von Anselm 6. (anselm68)


Lesenswert?

Hallo Ihr,


ich scheitere kläglich daran die serielle Schnittstelle zu verwenden.
Verwendet habe ich den Beispielcode von Microchip, angepasst auf das 
Curiosity Board. Hier liegt der CDC-Port auf USART3 PB0/PB1(laut 
Dokumentation)
1
#define F_CPU 3333333UL
2
#define USART3_BAUD_RATE(BAUD_RATE) ((float)(F_CPU * 64 / (16 * (float)BAUD_RATE)) + 0.5)
3
#define MAX_COMMAND_LEN    8
4
#define INIT_DELAY      10  /* Delay to invalidate the after-reset noise on the PC0 pin (TX) */
5
6
#include <avr/io.h>
7
#include <stdio.h>
8
#include <string.h>
9
#include <util/delay.h>
10
11
void USART3_init(void);
12
void USART3_sendChar(char c);
13
void USART3_sendString(char *str);
14
char USART3_readChar(void);
15
void LED_on(void);
16
void LED_off(void);
17
void LED_init(void);
18
void executeCommand(char *command);
19
20
void USART3_init(void)
21
{
22
    USART3.BAUD = (uint16_t)USART3_BAUD_RATE(9600);
23
24
    USART3.CTRLB |= USART_RXEN_bm | USART_TXEN_bm;
25
  
26
  PORTB.DIR |= PIN0_bm;
27
  PORTB.DIR &= ~PIN1_bm;
28
}
29
30
void USART3_sendChar(char c)
31
{
32
    while (!(USART3.STATUS & USART_DREIF_bm))
33
    {
34
        ;    
35
    }
36
    USART3.TXDATAL = c;
37
}
38
39
void USART3_sendString(char *str)
40
{
41
    for(size_t i = 0; i < strlen(str); i++)
42
    {
43
        USART3_sendChar(str[i]);
44
    }
45
}
46
47
char USART3_readChar(void)
48
{
49
    while (!(USART3.STATUS & USART_RXCIF_bm))
50
    {
51
        ;
52
    }
53
    return USART3.RXDATAL;
54
}
55
56
void LED_on(void)
57
{
58
    PORTF.OUT &= ~PIN5_bm;
59
}
60
61
void LED_off(void)
62
{
63
    PORTF.OUT |= PIN5_bm;
64
}
65
66
void LED_init(void)
67
{
68
    PORTF.DIR |= PIN5_bm;
69
  LED_off();
70
}
71
72
void executeCommand(char *command)
73
{
74
    if(strcmp(command, "ON") == 0)
75
    {
76
        LED_on();
77
        USART3_sendString("OK, LED ON.\r\n");
78
    }
79
    else if (strcmp(command, "OFF") == 0)
80
    {
81
        LED_off();
82
        USART3_sendString("OK, LED OFF.\r\n");
83
    } 
84
    else 
85
    {
86
        USART3_sendString("Type ON/OFF to control the LED.\r\n");
87
    }
88
}
89
90
int main(void)
91
{ 
92
    PORTF_DIR  &= ~PIN6_bm;
93
    
94
    char command[MAX_COMMAND_LEN];
95
    uint8_t index = 0;
96
    char c;
97
  
98
  /* This delay invalidates the initial noise on the TX line, after device reset. */
99
    _delay_ms(10);
100
  
101
    USART3_init();
102
    LED_init();
103
  LED_on();
104
    USART3_sendString("Type ON/OFF to control the LED.\r\n");
105
    _delay_ms(1000);
106
    LED_off();
107
    _delay_ms(1000);
108
    while (1)
109
    {
110
        if(!(PORTF.IN & PIN6_bm)){
111
            LED_on();
112
            _delay_ms(1000);
113
            LED_off();
114
        }
115
        LED_on();
116
        _delay_ms(100);
117
        LED_off();
118
        _delay_ms(250);
119
/*        c = USART3_readChar();
120
        if(c != '\n' && c != '\r')
121
        {
122
            command[index++] = c;
123
            if(index > MAX_COMMAND_LEN)
124
            {
125
                index = 0;
126
            }
127
        }
128
       
129
        if(c == '\r')
130
        {
131
            command[index] = '\0';
132
            index = 0;
133
            executeCommand(command);
134
        }
135
        */
136
    }
137
}
Das lesen von Serialport blockiert weil er da pollt (auskommentiert). 
Zum Testen habe ich die Ledsteuerung etwas geändert -> funktioniert -> 
F_CPU ist auch richtig eingestellt.
Auf dem COM3 (am PC) kommt jedoch nichts an was ich sende.

Das Boad hat die Softwareversion:
1
Currently loaded versions:
2
Application version...........1.21.37 (0x01.0x15.0x25)
3
Tool pack version .............1.6.222

Was habe ich übersehen?

Gruß
Anselm

von Volker B. (Firma: L-E-A) (vobs)


Lesenswert?

Anselm 6. schrieb:

> Auf dem COM3 (am PC) kommt jedoch nichts an was ich sende.
(...)
> Was habe ich übersehen?

Wie sind denn COM3 und das Board verbunden?

Grüßle
Volker

von Gener Vter (Gast)


Lesenswert?

Anselm 6. schrieb:
> Was habe ich übersehen?

Bitte unbedingt den Source Code in einen Anhang stecken, die
Darstellung des programmtextes im laufenden Beitragstext ist
sehr störend und verhindert auch die Hilfsbereitschaft.

Zumal zur Zeit die Foren-Software eine anständige Darstellung
massiv behindert statt sie zu unterstützen.

von Anselm 6. (anselm68)


Angehängte Dateien:

Lesenswert?

Com3 geht via Debugschnittstelle als virtual comport raus.
Bei älteren Firmwareversionen gab es wohl schonmal Probleme mit diesem 
ComPort.
Ich habe die derzeit aktuelleste aufgespielt (geschieht automatisch wenn 
man MPX-Lab gestartet und das Board via USB angeschlossen hat).

Für die genervten hier der Code im Anhang. Ist auch besser lesbar, da 
stimme ich zu.

Gruß
Anselm

von Anselm 6. (anselm68)


Lesenswert?

Nun ist das Board verstorben.
Ich hatte mit dem Oszilloskop PF5(LED-Ausgang) sowie den TX Port von 
serial3 geprüft.
Am LED-Port waren eindeutige Pegel zu sehen.
Am Tx eher ein wenig Rauschen wie bei einem offenem Eingang des Oszis.
Mit angeschlossenem Oszi wollte ich eine neue Testsoftware aufspielen, 
seit dem ist das Board TOT. Einen Kurzschluss im Messaufbau kann ich 
sicher ausschliessen.

So muss ich warten bis ich die DIL-Version fürs Steckbrett habe.

Aber Danke fürs lesen :)
Ein schönes Wochenende Euch allen.

Anselm

von BlaBla (Gast)


Lesenswert?

Die scheinen ein wenig sensibel zu sein. Vielleicht weil jetzt Microchip 
das Sagen hat und nicht mehr Atmel.  ;-)
Beitrag "zweites ATmega4809 Curiosity Nano Board tot"

von Veit D. (devil-elec)


Lesenswert?

Hallo,

wollte ich auch soeben verlinken.  :-)

Anselm, miss mal vor und nach der Sicherung ob Ub vorhanden ist. Wenn du 
Glück hast ist auch nur die Sicherung durch.

: Bearbeitet durch User
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.