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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.