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


von EGGI (Gast)


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

von dsgasdfg (Gast)


Lesenswert?

Hallo,

erstmal zur gültigen C Syntax:

der Code muss so aussehen, um überhaupt erst mal kompiliert werden zu 
können!
1
#include <pic16f887.h>
2
3
void main (void)  //kein ; keine Funktionsdeklaration sonder Funktionsdeklaration!
4
{
5
  int adc_wert;
6
  unsigend char count, i;
7
  count=0;
8
9
  setup_ports(AN0);  //wo ist diese Funktions definiert? Wo ist Makro definiert?
10
  setup_adc(ADC_CLOCK_DIV_8);  //wo ist diese Funktions definiert?  Wo ist Makro definiert?
11
  set_adc_channel(0);  //wo ist diese Funktions definiert? 
12
  delay_ms(20);  //wo ist diese Funktions definiert? 
13
14
  TRISB=0x00;  //wo ist Makro definiert? pic16f887.h ?
15
  LATB=0x00;  //wo ist Makro definiert? pic16f887.h ?
16
17
  while(1)
18
  {
19
    count++;
20
21
    adc_wert=read_ADC();  //wo ist diese Funktions definiert?
22
    delay_us(10); //Funktion definiert?
23
24
25
    if (adc_wert >= 255)
26
    {
27
      LATBbits.LATB0=1;  //wo ist diese Structur definiert?
28
    }
29
    else
30
    {
31
      LATB=0x00;  //wo definiert?
32
    }
33
  } //end while(1)
34
}


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

von dsgasdfg (Gast)


Lesenswert?

Hallo,

erstmal zur gültigen C Syntax:

der Code muss so aussehen, um überhaupt erst mal kompiliert werden zu 
können!
1
#include <pic16f887.h>
2
3
void main (void)  //kein ; keine Funktionsdeklaration sondern Funktionsdefinintion!
4
{
5
  int adc_wert;
6
  unsigend char count, i;
7
  count=0;
8
9
  setup_ports(AN0);  //wo ist diese Funktions definiert? Wo ist Makro definiert?
10
  setup_adc(ADC_CLOCK_DIV_8);  //wo ist diese Funktions definiert?  Wo ist Makro definiert?
11
  set_adc_channel(0);  //wo ist diese Funktions definiert? 
12
  delay_ms(20);  //wo ist diese Funktions definiert? 
13
14
  TRISB=0x00;  //wo ist Makro definiert? pic16f887.h ?
15
  LATB=0x00;  //wo ist Makro definiert? pic16f887.h ?
16
17
  while(1)
18
  {
19
    count++;
20
21
    adc_wert=read_ADC();  //wo ist diese Funktions definiert?
22
    delay_us(10); //Funktion definiert?
23
24
25
    if (adc_wert >= 255)
26
    {
27
      LATBbits.LATB0=1;  //wo ist diese Structur definiert?
28
    }
29
    else
30
    {
31
      LATB=0x00;  //wo definiert?
32
    }
33
  } //end while(1)
34
}


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

von Michael (Gast)


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 ;)

von EGGI (Gast)


Angehängte Dateien:

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

von EGGI (Gast)


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.

von EGGI (Gast)


Lesenswert?

Kann mir denn keiner Helfen :( schade...

von Lehrmann M. (ubimbo)


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 ...

von EGGI (Gast)


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

von Stefan B. (stefan) Benutzerseite


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.

von Michael (Gast)


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.

von EGGI (Gast)


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 "

von EGGI (Gast)


Lesenswert?

#pragma*

von Stefan B. (stefan) Benutzerseite


Lesenswert?

http://www.google.de/search?q=mplab+c18+manual
http://sprut.de/electronic/pic/c/pic_c/pic_c90_pic_spezifisches.html
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.

von EGGI (Gast)


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! **********

von EGGI (Gast)


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.

von Stefan B. (stefan) Benutzerseite


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

von Eggi (Gast)


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.

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