Forum: Mikrocontroller und Digitale Elektronik Poti Werte an RS232


von Matthias (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Leute,

bin gerade mal wieder etwas am Basteln und Probieren. Ich habe an mein 
STK500 3 Potis die am ATmega16 am AD wandler hängen.
Es ist so dass ich die Werte die ich mit den 3 Potis einstellen getrennt 
zum PC über RS232 senden möchte. Im hintergrund läuft ein C++ Programm 
dass dann die Daten abfangen und sortiert in eine Textfile schreiben 
soll.
Das Auslesen der Werte über das Programm funktioniert schon mal. Nun 
geht es irgendwie darum die Werte der 3 Potis schön schauber vom MC an 
den PC zu senden. Natürlich soll jeder Wert einzeln übertragen werden, 
so damit ich die Daten dann hintereinander in eine Textfile schreiben 
kann. Der sachstand ist momentan so, dass der Mc mir wert Schickt und 
ich sie mir dann einfach am PC über ein C++ Programm das die 
Schintstelle abruft anzeigen lasse, also es laufen dann imer die Werte 
im DOS Fenster runter.
Nur kommt alles irgendwie durcheinander. Anbei der Code für den 
ATmega16.
ich hoffe ihr könnt mir weiterhelfen.

MFG
Matthias

von Karl H. (kbuchegg)


Lesenswert?

1
    if (UCSRA & (1<<UDRE))
2
     {
3
           UDR = uc_result;           // Daten von PortA einlesen und     
4
       }                         // in USART Senderegister schreiben

hier ist dein Ansatzpunkt. Dein Code sagt mehr oder weniger: Och ich 
versuch mal zu senden, aber wenn die UART noch mit einer anderen 
Übertragung beschäftigt ist, dann lass ich es halt.
Dass da alles durcheinander kommt, darf dich nicht wundern.

Bau dir erst mal einen Satz vernünftiger UART Funktionen.

die erste Funktion: Ein Byte über die UART verschicken. Dabei eventuell 
solange warten, bis eine vorhergehende Übertragung fertig ist.
1
void uart_putc( unsigned char c )
2
{
3
  while( !( UCSRA & (1<<UDRE) ) )
4
    ;
5
6
  UDR = c;
7
}

Darauf aufbauend eine Funktion, die einen String verschicken kann:
1
void uart_puts( const char* s )
2
{
3
  while( *s )
4
    uart_putc( *s++ );
5
}

die wiederrum ist Basis für zb
1
void App1_Task_5ms(void)
2
{
3
  char buffer[20];
4
5
  uc_result = Get_ADC_Value(ADC_Channel_0);  // AD-Wert von Kanal 0 einlesen
6
                                              // Wertebereich 0 ...255 (0V: 0, 5V: 255)
7
8
  Set_PWM_DC(uc_result);                     // Duty-Cycle PWM-Signal setzen
9
                                              // PWM Ausgang: PB3
10
                        // Polarität: Aktiv Low
11
                                              // Wertebereich 0 ...255
12
13
  sprintf( buffer, "#%u: &u\r\n", 0, uc_result );
14
  uart_puts( buffer );
15
16
  ...

und ab jetzt ist dir Tür und Tor geöffnet, wie du deine Texte auf dem µC 
formatierst, so dass du das Textfile erhältst, das du dir vorstellst.

von Matthias (Gast)


Lesenswert?

Hallo,

danke für deine Hilfe. Ich habe nun das Programm so erweitert wie du es 
in deinem Beitrag beschrieben hast. Funktioniert auch soweit. Nur Leider 
Laufen nun einfach irgendwelche Werte durch. Wenn ich also die Poti 
stellungen Verändere tut sich überhaupt nichts.
Kann es sein dass ich noch was vergessen habe oder kann ich kann ich den 
Cod so wie er ist 1:1 übernehmen?

MFG
Matthias

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.