www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AD- Wandlung Programm fertig aber auch richtig?


Autor: EGGI (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schönen guten Morgen,

Also ich habe jetzt versucht ein Programm zu schreiben, sodass ich mit 
dem AD- Wandler des PIc16F887 arbeiten kann. Es wäre nett wenn ihr mal 
einen Blick drauf werfen könnt und sagen könnt ob mir iwas fehlt oder ob 
iwas falsch ist ( halt nen kleines Feedback).

Hier der Code:

#include <pic16f887.h>
void main (void);
{
  int a,count,i;
  count=0;

  setup_ports( AN0 );
  setup_adc( ADC_CLOCK_DIV_8 );
  set_adc_channel( 0 );
  delay_ms (20);

  TRISB=0x00;
  LATB=0x00;

  while(1)
    count++;

    a=read_ADC();
    delay_us(10)


  if (adc_wert >= 255)
  {
  LATBbits.LATB0=1;
  }
  else
  {
  LATB=0x00;
   }
}

In dem Programm will ich das der Pic den Analogen Wert über Pin A0 
ausließt und bei einem bestimmten Fall "hier 255" ein Signal auf den Pin 
B0 gibt.

So dann habe ich noch ein weiteres Problem. Unzwar shabe ich das 
Programm in MPLAB geschrieben und will das Compilieren aber es geht 
nicht. Habe es in MPLAB ausprobiert da geht es nicht und in nootpad habe 
ichs auch eingefügt und versucht es über eine Makefile zu compilieren 
ging auch nicht ( da denk ich aber habe ich die falsche makefile für ). 
Vlt habt ihr ja ne vernünftige makefile oder ne idee woran es liegt.

Mfg EGGI

Autor: dsgasdfg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

erstmal zur gültigen C Syntax:

der Code muss so aussehen, um überhaupt erst mal kompiliert werden zu 
können!

#include <pic16f887.h>

void main (void)  //kein ; keine Funktionsdeklaration sonder Funktionsdeklaration!
{
  int adc_wert;
  unsigend char count, i;
  count=0;

  setup_ports(AN0);  //wo ist diese Funktions definiert? Wo ist Makro definiert?
  setup_adc(ADC_CLOCK_DIV_8);  //wo ist diese Funktions definiert?  Wo ist Makro definiert?
  set_adc_channel(0);  //wo ist diese Funktions definiert? 
  delay_ms(20);  //wo ist diese Funktions definiert? 

  TRISB=0x00;  //wo ist Makro definiert? pic16f887.h ?
  LATB=0x00;  //wo ist Makro definiert? pic16f887.h ?

  while(1)
  {
    count++;

    adc_wert=read_ADC();  //wo ist diese Funktions definiert?
    delay_us(10); //Funktion definiert?


    if (adc_wert >= 255)
    {
      LATBbits.LATB0=1;  //wo ist diese Structur definiert?
    }
    else
    {
      LATB=0x00;  //wo definiert?
    }
  } //end while(1)
}


Könntest du den kompletten Sourcecode posten? Dann kann dir besser 
geholfen werden.

Autor: dsgasdfg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

erstmal zur gültigen C Syntax:

der Code muss so aussehen, um überhaupt erst mal kompiliert werden zu 
können!

#include <pic16f887.h>

void main (void)  //kein ; keine Funktionsdeklaration sondern Funktionsdefinintion!
{
  int adc_wert;
  unsigend char count, i;
  count=0;

  setup_ports(AN0);  //wo ist diese Funktions definiert? Wo ist Makro definiert?
  setup_adc(ADC_CLOCK_DIV_8);  //wo ist diese Funktions definiert?  Wo ist Makro definiert?
  set_adc_channel(0);  //wo ist diese Funktions definiert? 
  delay_ms(20);  //wo ist diese Funktions definiert? 

  TRISB=0x00;  //wo ist Makro definiert? pic16f887.h ?
  LATB=0x00;  //wo ist Makro definiert? pic16f887.h ?

  while(1)
  {
    count++;

    adc_wert=read_ADC();  //wo ist diese Funktions definiert?
    delay_us(10); //Funktion definiert?


    if (adc_wert >= 255)
    {
      LATBbits.LATB0=1;  //wo ist diese Structur definiert?
    }
    else
    {
      LATB=0x00;  //wo definiert?
    }
  } //end while(1)
}


Könntest du den kompletten Sourcecode posten? Dann kann dir besser 
geholfen werden.

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
EGGI schrieb:
>     a=read_ADC();
>     delay_us(10);

Mal zu den bereits gemachten Anmerkungen: Es gibt ein Flag, welches 
einem sagt wann die Wandlung fertig ist. Warte keine Zeitspanne ab bis 
die Wandlung fertig ist sondern warte bis der Wandler sagt, dass er 
fertig ist.

@ dsgasdfg

Die Makros sind in der Headerdatei des Pics definiert, die Funktionen 
muss man, wenn ich mich recht entsinne, schon selbst definieren ;)

Autor: EGGI (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
@Michael okey dann mach ich das mal raus mit dem delay.

Okey das Problem ist, ich habe noch nicht sehr viel Ahnung von dem was 
ich da tue xD habe da ein tuturial wo das erklärt wurde einigermaßen. Oh 
habe gerade noch was gefunden was dort drin steht.
-->
#device ADC=8
#fuses HS,NOPROTECT,NOWDT

#use delay(clock=20000000)
#use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7)

Ach ich stell mal das ganze tut rein könnter selber sehen :).

versteh schon langsam was da was bedeutet in dem Programm weiß aber 
nicht genau wie ich da was defenieren muss und was ich einfach drauf los 
schreiben kann.

Gruss

Autor: EGGI (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich habe das jetz mal so programmiert wie du es gesagt hast. Klappt 
immer noch nicht :( und wie defeniere ich die makros? Wäre nett wenn ihr 
mir helfen könntet ich bin noch nicht so der hellste ^^ in der 
Geschichte mit dem programmieren. Bin noch nicht all so lange in der 
Materie. Was fehlt mir und wie weiß ich bzw kann ich mir aneignen wie 
ich was defeniere? in den tuturials die ich bis jetz gesehen habe und 
bearbeitet habe, dort habe ich nicht wirklich was darüber gefunden.

Ich hoffe ihr habt Tipps oder kleine Hilfestellungen für mich sodas ich 
das beweltigt bekomme.

Autor: EGGI (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann mir denn keiner Helfen :( schade...

Autor: Lehrmann Michael (ubimbo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
es wäre nicht schlecht die Fehler die der Comiler ausgibt hier zu 
posten. Ansonsten müssten wir ja blindlings raten was für Fehler dein 
Compiler ausgibt ...

Autor: EGGI (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das kann ich jetz leider erst machen wenn ich wieder zu Hause bin. Werd 
ich sofort posten was das für Compiler Fehler sind.

Aber mit dem Programm wie es jetzt besteht kann man sagenes könnte 
laufen? Oder fehlen da irgentwelche defenierungen oder sonst iwas?

Mfg EGGI

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
EGGI schrieb:

> Kann mir denn keiner Helfen :( schade...

Liegt vielleicht daran, dass du es den Helfern besonders schwer machst.

Beitrag "Re: AD- Wandlung Programm fertig aber auch richtig?"

    * __C_Tutorial-12012002.doc (162 Bytes, 4 Downloads) | anzeigen

.doc ???
162 Bytes ???
Da ist doch was faul!

>> und wie definiere ich die Makros?

Diese?

> #device ADC=8
> #fuses HS,NOPROTECT,NOWDT
> #use delay(clock=20000000)
> #use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7)

Das sind keine regulären C-Makros sondern compilerspezifische 
Erweiterungen.

Man kann nur raten, welchen Compiler das "Tutorial" verwendet.
Es sieht nach CCS C Compiler aus.
http://www.ccsinfo.com/content.php?page=compexamples

Du verwendest den MPLAB C Compiler. Der hat andere Befehle für die 
gleichen Zwecke. Ich würde im Compiler User Manual unter dem Stichwort 
#pragma nachsehen.

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan B. schrieb:
> .doc ???
> 162 Bytes ???
> Da ist doch was faul!

Der _ deutet auf eine temporäre Datei hin in der z.B. die Änderungen 
mitgeschrieben werden oder so ein Quatsch. Es ist auf jeden Fall nicht 
das Orginaldokument.

Autor: EGGI (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so habe ich das Dokument von ner Arbeitskolegin bekommen.

Wie muss ich die #pramas defenieren? Also wie weiß ich was ich da 
schreiben muss? Hab da keine Ahnung von :(. Steht sowas auch iwie in nem 
Tuturial? Weil ich finde das allerdings auch nich bei MPLAB dieses " 
USER MANUAL "

Autor: EGGI (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#pragma*

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://www.google.de/search?q=mplab+c18+manual
http://sprut.de/electronic/pic/c/pic_c/pic_c90_pic...
http://www.google.de/search?q=ccs+manual

Die Umsetzung Tutorial CCS nach Quellcode MPLAB ist IMHO zu schwierig. 
Ich würde versuchen ein MPLAB Beispiel zu finden bzw. mich in die MPLAB 
Methoden einzuarbeiten. Oder - wenn ein CCS C Compiler vorhanden ist - 
den zu benutzen.

Autor: EGGI (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn ich das garnicht hin bekomme mit dem MPLAB. Dann werde ich mir 
diesen CCS Compiler beschaffen

Hier der Fehler:

Executing: "C:\Programme\HI-TECH Software\PICC\9.70\bin\picc.exe" 
-owaage.cof -mwaage.map --summary=default --output=default --chip=16F877 
-P --runtime=default --opt=default -D__DEBUG=1 -g --asmlist 
"--errformat=Error   [%n] %f; %l.%c %s" "--msgformat=Advisory[%n] %s" 
"--warnformat=Warning [%n] %f; %l.%c %s"
(1273) Omniscient Code Generation ist in der Lite Version nicht 
verfügbar (warning)
HI-TECH C Compiler for PIC10/12/16 MCUs (Lite Mode)  V9.70
Copyright (C) 2009 Microchip Technology Inc.
Error   [939] ; . keine Dateien angegeben

********** Build failed! **********

Autor: EGGI (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://pic-projekte.de/pic_c.html#konfpic

Hier steht noch ein wenig was über pragma aber nicht viel xD mir ist 
geraed eingefallen ich habe zu Hause noch iwo nen Assembler Lehrgang rum 
liegen. Ich schau da mal wie ich da damals in Assemlber die konfig 
geschrieben habe. Vlt macht es dann klick und es fällt mir leichter das 
in C auch hin zu bekommen.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bald hast du alle C Compiler durch, die es für PIC gibt!

>>> Programm in MPLAB geschrieben und will das Compilieren aber es geht
>> Tutorial sieht nach CCS C Compiler aus.
> HI-TECH C Compiler for PIC10/12/16 MCUs (Lite Mode)  V9.70

Willst du nicht noch die anderen fünf PIC C Compiler ausprobieren? Mal 
sehen wann Andreas die Farben bei den >>> aus gehen ;-)

http://www.google.de/search?q=HI-TECH+C+Compiler+manual

Autor: Eggi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja das Problem ist nur das ich MPLAB, den PIC, HI-Tech Compiler gestellt 
bekommen habe. Darum versuche ich es damit, aber wenn es nicht klappt, 
dann muss ich auf was anders zurück greifen. Das dumme ist ich habe dazu 
nen Ordner bekommen wo nur drin steht das ich in C Programmieren kann in 
MPLAB.

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.