Hallo, Ich arbeite gerade mit dem dsPIC Demoboard der Firma Microchip in Auftrag unserer Schule. Verwendet wird der im Betreff genannte dsPIC4011 und der CCS-Compiler in der neuesten Version. Jetz habe ich damit folgende 2 Probleme: 1.: Sobald ich in meinem Programm eine Berechnung durchführe (Multiplikation, Dividieren etc.) mit meiner Variablen, stimmt die Ausgabe im HyperTerminal nicht mehr. Anstatt das im printf geschriebene "ADC Spannung: (Wert)" auszugeben, gibt er "AACCSSaannnn: " aus, also jedes ungerade Zeichen doppelt. Woran kann das liegen? Hab schon verschiedene Datentypen, ADC Einstellungen probiert und es wurde nicht besser. 2.: Der Wert im AD Wandler steht um 6 Bits zu weit links, ich muss ihn also mit dem ">>" Operator um 6 stellen nach rechts verschieben. Was kann hier die Lösung sein? Hier noch der Quellcode des Programmes, ein Simpler AD Wandler: #include "30F4011.h" #include <string.h> #fuses XT_PLL8, NOWDT, NOBROWNOUT #use delay(clock=58982400) #use standard_io(d) #use rs232(baud=9600,UART2) unsigned int16 wert; float spannung; void main(){ setup_adc_ports( ALL_ANALOG ); setup_adc( ADC_CLOCK_INTERNAL ); set_adc_channel( 2 ); printf("Willkommen zur Spannungsmessung!\n\r"); delay_ms(1000); while(1) { set_adc_channel( 2 ); delay_us(100); wert=read_adc(); wert=wert>>6; delay_us(100); spannung=(wert/1023.0)*5.0; printf("ADC spannung:%f\n\r",wert); delay_ms(1000); } } Freue mich über jede Hilfe! Liebe Grüße Matthias
Hi dass du dein Messeregnis 6* nach rechts schieben musst, dürfte daran liegen, dass die PIC's, wenn ich mich recht erinnere Messergebnisse entweder rechts oder links bündig liefern. Du bekommts dein Ergebnis offenbar linksbündig. Warum dein printf nicht funktioniert weiss ich nicht. Ich hab einmal mit dem C18-Compiler an einem 4013 gearbeitet, und da gab es auch mal Probleme mit ner Bibliotheks-Funktion, da diese Funktionen oft reichlich RAM brauchen. Aber dein doch kompaktes Programm sollte nicht zu viel davon benötigen. Kommt sich villeicht dein delay und der UART in die Quere ? Hats du schon mal versucht was passiert, wenn du das delay weglässt ? Gerhard
Matthias Motschiunig wrote: > #include "30F4011.h" > #include <string.h> > > #fuses XT_PLL8, NOWDT, NOBROWNOUT > #use delay(clock=58982400) > #use standard_io(d) > > #use rs232(baud=9600,UART2) > > unsigned int16 wert; > float spannung; > > void main(){ > > setup_adc_ports( ALL_ANALOG ); > setup_adc( ADC_CLOCK_INTERNAL ); > set_adc_channel( 2 ); > > > printf("Willkommen zur Spannungsmessung!\n\r"); > delay_ms(1000); > > > while(1) { > > set_adc_channel( 2 ); > delay_us(100); > wert=read_adc(); > wert=wert>>6; > delay_us(100); > spannung=(wert/1023.0)*5.0; > printf("ADC spannung:%f\n\r",wert); > delay_ms(1000); > } > } > Der Code ist ja erschreckend. Das sieht ja fast wie Bascom aus. Da ich nicht sehen kann welche Register wie gesetzt werden, kann ich mit dem Code nichts anfangen. > Ich arbeite gerade mit dem dsPIC Demoboard der Firma Microchip in > Auftrag unserer Schule. Verwendet wird der im Betreff genannte dsPIC4011 > und der CCS-Compiler in der neuesten Version. Warum wird nicht der kostenlose Compiler von Microchip verwendet? Wie siehts mit Debuggern aus an der Schule? Besteht die Möglichkeit zu debuggen? Gerhard wrote: > Warum dein printf nicht funktioniert weiss ich nicht. Ich hab einmal mit > dem C18-Compiler an einem 4013 gearbeitet, und da gab es auch mal > Probleme mit ner Bibliotheks-Funktion, da diese Funktionen oft reichlich > RAM brauchen. Aber dein doch kompaktes Programm sollte nicht zu viel > davon benötigen. Sorry, aber das ist gelogen, du hast nicht mit dem C18-Compiler an einem 4013 gearbeitet. (Ich nehme an du meinst den 30F4013, der verlangt nach dem C30 Compiler)
@Willivonbienemaya Jep, hast recht, war natürlich der C30. Weiss gar nicht wie ich auf den C18 komme.. :-( Gruß Gerhard
Hallo, du hast einen Fehler im Datentyp, der im printf ausgegeben wird: unsigned int16 wert; printf("ADC spannung:%f\n\r",wert); wert ist kein float, deswegen geht das printf schief. Schreib doch mal nicht wert sondern spannung in das printf, ich denke, so wars auch gewollt. Grüße, Peter
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.