Forum: Mikrocontroller und Digitale Elektronik C-Programmierung Ausgabe


von PICT (Gast)


Lesenswert?

Hallo, ich versuche mit meinem PIC18F2550 ein Signal einzulesen. Sobald 
dieses Signal 4,4 Volt erreicht soll ein Piepser anfangen zu piepsen, 
jedoch funktioniert es nicht. Da ich die Hardware überprüft habe muss es 
an der Software liegen. Was ist an diesem Programm falsch:
1
#include<18F2550.h>
2
#fuses HS,NOWDT,NOPROTECT,NOLVP
3
#use delay(clock=20000000)
4
5
6
int8 signal;
7
8
9
void main()
10
11
         {
12
13
output_low(Pin_A2);
14
15
16
17
while (TRUE)
18
   {
19
input(Pin_C0);
20
21
if (signal>=85)
22
output_high(Pin_A2);
23
24
if (signal<=85)
25
output_low(Pin_A2);
26
27
28
29
   }
30
      
31
         }

: Verschoben durch User
von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Du wertest eine Variable namens "signal" aus, weist der aber nie und 
nirgends einen Wert zu.

Und was ist, wenn "signal" den Wert 85 hat? Dann sind beide 
Bedingungen wahr, denn signal ist dann sowohl >= als auch <= 85.

Denk da noch mal drüber nach.


Nebenbei: Dein Code ist schrecklich formatiert.

von Karl H. (kbuchegg)


Lesenswert?

Und das nächste mal bitte im µC+Elektronik Forum posten. Mit 
PC-Programmierung hat das hier nichts zu tun.

von Decius (Gast)


Lesenswert?

Die Initialisierung der Hardware fehlt! Die Richtung der Portpins muß 
initialisiert werden! Schau mal nach soetwas wie dem TRISA Register, 
wobei A für PORTA steht. Für PORTC heißt es dann TRISC, und so weiter.

Außerdem scheinst du eine analoge Spannung einlesen zu wollen. Daß 
heißt, Du mußt auch den ADU initialisieren.

von PICT (Gast)


Lesenswert?

Habe es ein bisschen zu verbessern versucht, könnt ihr weitere fehler 
entdecken?

#include<18F2550.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)


int8 signal;

setup_adc_ports( CN0_ANALOG );
setup_adc( ADC_CLOCK_INTERNAL );

void main()

         {

set_adc_channel(0);
      delay_us(20);
      signal=read_adc();



while (TRUE)
   {

input(Pin_C0);

if (signal>=100)
   output_b(1F);

von Michael S. (rbs_phoenix)


Lesenswert?

Also meines Wissens ist das nicht C-Konform:
1
setup_adc_ports( CN0_ANALOG );
2
setup_adc( ADC_CLOCK_INTERNAL );

Funktionen so aufrufen kann man ansich nicht, da es nirgends drin steht, 
z.B. in der main. So hab ich es jedenfalls gelernt. Und für Prototypen 
fehlen die Datentypen, sprich für Parameter und den Rückgabewert.

Außerdem fehlen die 2 '}' am ende, einmal für die While(TRUE) und für 
die Main.

Welchen Compiler benutzt du denn? Und sind die Funktionen, die du 
benutzt, Standardmäßig mit drin oder müssen die noch eingebunden werden?

Häng einfach mal deine c-Datei so wie sie ist an. Nichts "optimieren" 
oder "unwichtiges" löschen.

von XXX (Gast)


Lesenswert?

Hallo

Im Moment wird "signal" nur ein einziges Mal zugewiesen
und dann immer und immer wieder verglichen ohne sich jemals zu
ändern.

Nimm
signal=read_adc();
mit in die Endlos-Schleife!

Gruß
Joachim

von Karl H. (kbuchegg)


Lesenswert?

PICT schrieb:
> Habe es ein bisschen zu verbessern versucht, könnt ihr weitere fehler
> entdecken?

Das ist eigentlich nicht die Frage.
Die Frage ist eigentlich: Warum siehst du diese absolut offensichtlichen 
Fehler nicht?

Wenn du denkst, man könne ein Programm schreiben ohne die 
Programmiersprache zu lernen, dann muss dich dich enttäuschen. So wie 
eine Fremdsprache bedeutet auch eine Programmiersprache einen 
Lernaufwand. Und der ist nur unbedeutend geringer als bei einer 
Fremdsprache. Es gibt zwar weniger 'Vokabeln', dafür muss man aber viel 
mehr Fall und Kombinationsbeispiele im Kopf haben, als bei einer 
Fremdsprache. Zudem ist ein Computer (respektive der Compiler) 
unerbittlich: Während ein menschliches Gegenüber dich bei Fehlern in der 
Fremdsprache immer noch versteht und das was du sagen willst, richtig 
errät, ist da bei einem Compiler/Computer Ende der Fahnenstange. Du 
musst perfekt sein! Perfekter als jeder Dolmetscher, der bei der UNO 
arbeitet.
Klar, niemand kann das aus dem Stand. Aber ohne Lehrbuch wird das 
nichts. Mit anlassbezogenem Viertelwissen aus Foren kommst du nicht bis 
zu dem Perfektionsgrad, den du brauchst um gute Programme zu schreiben.

Du brauchst ein C-Buch!

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.