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
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.
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.
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 ;)
@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
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.
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 ...
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
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.
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.
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 "
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.
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! **********
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.