Hallo,
Ich habe jetzt gleich die nächste Frage.
Ich möchte per USART daten an das Programm "Logview" senden, welches diese graphisch auswerten kann. Mit dem Terminalprogramm empfange ich die Daten, die ich auch empfangen will ($1;1;;Daten;0<cr><lf>), aber LogView empfängt nur wirres Zeug.
Bei LogView im "Debug Logging" steht:
Hier der Programmcode (ich weiß, dass man das unten mit nem String besser machen kann...):16:53:09,648 [ SerialData] > Empfang von Daten - TForm1.WMRxClusterMessage
16:53:09,648 [ SerialData] ..Anzahl empfangener Bytes: 49
16:53:09,648 [ SerialData] ..Rohdaten : <NUL>€€x<NUL>ÿ€øø€x<NUL>ÿ€øø€øø€<NUL>xàøø€<NUL>ø€< NUL>€ø<NUL>xà€xà€<NUL>€<NUL>øxà€xà€
16:53:09,648 [ SerialData] ..HEX : 0080807800FF80F8F8807800FF80F8F880F8F8800078E0F8F8 8000F8800080F80078E08078E080008000F878E08078E080
16:53:09,663 [ Device] ..AUSWERT : <NUL>€€x<NUL>ÿ€øø€x<NUL>ÿ€øø€øø€<NUL>xàøø€<NUL>ø€< NUL>€ø<NUL>xà€xà€<NUL>€<NUL>øxà€xà€
16:53:09,663 [ Main] > ..DatenempfangAuswertung
16:53:09,663 [ Main] ....Daten als ASCII = '<NUL>€€x<NUL>ÿ€øø€x<NUL>ÿ€øø€øø€<NUL>xàøø€<NUL>ø€ <NUL>€ø<NUL>xà€xà€<NUL>€<NUL>øxà€xà€'
16:53:09,663 [ Main] ....Daten als HEX = '0080807800FF80F8F8807800FF80F8F880F8F8800078E0F8F 88000F8800080F80078E08078E080008000F878E08078E080'
16:53:09,663 [ Main] ....Länge der Daten = 49
16:53:09,663 [ SerialData] ....Gerät: Testformat Lader Clustersize: 44 ClusterErweiterung: 0
16:53:09,663 [ SerialData] ....ACHTUNG: Falsche Clustersize! Datenlänge der INI passt nicht zu den empfangenen Daten!
16:53:09,663 [ Main] < ..DatenempfangAuswertung
Und zu guterletzt die INI Datei von LogView:Code:#include <avr/io.h> #define F_CPU 12000000UL #define BAUDRATE 9600UL #define UBBR F_CPU/16/BAUDRATE-1 #include <util/delay.h> uint16_t zaehler = 0; uint8_t Zustd = 0; void long_delay(uint16_t ms){ for(; ms>0; ms--) _delay_ms(1); } void ADWandler_init(void){ ADMUX = 0x00; ADMUX |= (1<<REFS0); //Referenzspannung ist Eingangsspannung des µContorllers ADCSRA = 0x00; ADCSRA |= (1<<ADPS0) | (1<<ADPS1) | (1<<ADPS2); //Frequenzteilungsfaktor 128 ADCSRA |= (1<<ADEN); //ADC Aktivieren } void usart_init(void){ UBRRH = UBBR >> 8; //Baudrate einstellen UBRRL = UBBR & 0xff; //Baudrate einstellen UCSRB = (1<<TXEN); //Transmitter (Daten schicken) aktivieren UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); //8Bit länge und 1 Stoppbit; Asynchron } void usart_send(uint8_t Sendung){ while (!(UCSRA & (1<<5))); //warten bis Senden moeglich (UDRE) UDR = Sendung; } int main(void){ DDRC = 0x00; uint16_t ADCErgebniss; usart_init(); ADWandler_init(); while(1){ ADMUX = (ADMUX & ~(0x1F)) | (0 & 0x1F); //Kanal füre Messung festlegen ADCSRA |= (1<<ADSC); //ADCmessung starten while (ADCSRA & (1<<ADSC) ); //ADC lesen lassen ADCErgebniss = ADCL + (ADCH<<8); //Messergebniss vom ADC speichern long_delay(200); usart_send(36); //$ usart_send(49); //1 usart_send(59); //; usart_send(49); //1 usart_send(59); //; usart_send(59); //; usart_send(ADCErgebniss); //Daten (ADC) usart_send(59); //; usart_send(52); //0 (Prüfsumme) usart_send(13); //CR usart_send(10); //LF } }
Hier ist noch eine Anleitung, wie der Code den ich mit dem µC sende aussehen muss: FormatbeschreibungCode:[Gerät] Name = Galvanischer Hautiwderstandmesser Hersteller = Richard U Gruppe = 09 Device_ID = ID_OPENFORMAT Used = 1 Abbildung = OpenFormat.jpg ChangeSettings = 1 HerstellerLink1 = HerstellerLink2 = LogViewLink = www.logview.info TimeStep_ms = 200 TimeGiven = 1 KanalAnzahl = 1 WerteFormat = ASCII Prüfsummenberechnung = keine PrüfsummenFormat = ASCII AutoStart = 0 AutoOpenToolbox = 0 [Stati] StatiAnzahl = 1 001 = Standard Test [serielle Schnittstelle] Port = COM1 Baudrate = 9600 Datenbits = 8 Stopbits = 0 Parität = 0 Flusskontrolle = 0 ClusterSize = -60 SetDTR = 0 SetRTS = 0 [Schnittstelle TimeOuts] RTOCharDelayTime = 290 RTOExtraDelayTime = 100 WTOCharDelayTime = 290 WTOExtraDelayTime = 100 [Anzeige Einstellungen Kanal 01] Zeitbasis = Zeit Einheit = s Symbol = t WerteAnzahl = 2 Messgröße1 = Spannung Einheit1 = U Symbol1 = V Faktor1 = 1.0 OffsetWert1 = 0.0 OffsetSumme1 = 0.0
Lesezeichen