mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP dsPIC4011 AD Wandler


Autor: Matthias Motschiunig (Firma: HTBL Mössingerstraße) (motsche)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Gerhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Willivonbienemaya .. (willivonbienemaya)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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)

Autor: Gerhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Willivonbienemaya

Jep, hast recht, war natürlich der C30. Weiss gar nicht wie ich auf den 
C18 komme.. :-(

Gruß
Gerhard

Autor: Peter Diener (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.