Forum: Mikrocontroller und Digitale Elektronik PIC18F452- Anfänger


von latif l. (latifleon)


Angehängte Dateien:

Lesenswert?

Hallo Leute,

da ich heut zum ersten Mal einen µC programmieren möchte, benötige ich 
eure Unterstützung..
Bei der Aufgabe soll ein C Programm etwicklet werden, welches:
1:Zuerst den Schalter S2 (RA4)im Polling Verfahren abfragt.
2:Wird der Schalter betätigt, soll der 10- Bit A/D-Wandler gestartet 
werden und die obersten 4 Bit des Wandlungsergebnisses sollen an den 
LED´s RB <3:0> angezeigt werden.
3:Anschließend soll der Ausgang des Summers RC2 invertiert werden und 
eine Zeitschleife soll eine Zeit erzeugen, damit am Summer ein klar Ton 
erzeugt wird.

Gruß

Leon

von Christian S. (chris-st)


Lesenswert?

Hallo,

wobei genau benötigst Du denn nun Hilfe ?
Du scheibst lediglich was Du haben willst, aber nicht wo es hängt.

Gruß
Christian

von Dieter K. (Gast)


Lesenswert?

latif leon schrieb:
> Bei der Aufgabe soll ein C Programm etwicklet werden, welches:

Jo schön. Entwicklungsdienstleistung ist immernoch kostenpflichtig und 
Hausaufgaben machen wir hier auch nicht.

Also: Welchen Compiler verwendest du denn?

Alles zum Thema PIC findest du unter: 
http://www.sprut.de/electronic/pic/index.htm

von latif l. (latifleon)


Lesenswert?

Ich hab einfach so angefangen:

#include "p18f452.h"
#include "lcd.h"

void init(void);
unsigned int x=0;

void init()
{


TRISA=0bFF;
ADCON0=0b85;
ADCON1=0b0E;
TRISB=0bF0;

}

war das mal für die Initialisierung schon richtig??

von Michael S. (rbs_phoenix)


Lesenswert?

Du musst deinen PIC Configurieren. Also welche Taktquelle usw.
Du brauchst außerdem eine void main() Funktion. Wenn der PIC gestartet 
wird, fängt er in dieser Funktion an und nach allen 
Variablendeklarationen kannst du dann die init() aufrufen.

latif leon schrieb:
> TRISA=0bFF;

Ich denke mal, das es nicht compilerabhängig ist: Hexadezimalzahlen 
werden 0xFF und nicht 0bFF geschrieben. Du kannst 0b10101010 schreiben, 
dann hast du die Binärzahl.

von Master S. (snowman)


Lesenswert?

mach mal ein blinklicht, wenn das klappt, dann beschäftige dich mit dem 
taster und dann mit dem ADC - nicht anders rum!
hier noch eine nette seite: http://www.pic-projekte.de -> tutorials

von latif l. (latifleon)


Lesenswert?

Dieter K. schrieb:
> Jo schön. Entwicklungsdienstleistung ist immernoch kostenpflichtig und
> Hausaufgaben machen wir hier auch nicht.
# weder Hü noch Hott..

> Also: Welchen Compiler verwendest du denn?
# C18-Compiler

> Alles zum Thema PIC findest du unter:
> http://www.sprut.de/electronic/pic/index.htm
# Ich danke

von latif l. (latifleon)


Lesenswert?

Michael Skropski schrieb:

>> Ich denke mal, das es nicht compilerabhängig ist: Hexadezimalzahlen
> werden 0xFF und nicht 0bFF geschrieben. Du kannst 0b10101010 schreiben,
> dann hast du die Binärzahl.

Ja stimmt habs grade gelesen....

von Lehrmann M. (ubimbo)


Lesenswert?

latif leon schrieb:
>> Also: Welchen Compiler verwendest du denn?
> # C18-Compiler

http://pic-projekte.de/pic_c.html

Da findest du noch einiges zum C18. Da ist das mit den Zahlenformaten 
und so auch ganz nett beschrieben. Sollte man kennen =)

latif leon schrieb:
> Ich hab einfach so angefangen:
>
> #include "p18f452.h"
> #include "lcd.h"
>
> void init(void);
> unsigned int x=0;
>
> void init()
> {
>
>
> TRISA=0bFF;
> ADCON0=0b85;
> ADCON1=0b0E;
> TRISB=0bF0;
>

while (1)
{
}

> }
>
> war das mal für die Initialisierung schon richtig??

Da gehört eine Endlosschleife hin, ansonsten macht der PIC ständig einen 
Reset (der dir nicht auffällt weil er so schnell ist). Ein µC Programm 
darf nie enden.

von Michael S. (rbs_phoenix)


Lesenswert?

Lehrmann Michael schrieb:
> Da gehört eine Endlosschleife hin, ansonsten macht der PIC ständig einen
> Reset (der dir nicht auffällt weil er so schnell ist). Ein µC Programm
> darf nie enden.

Vergiss nicht, das init in main zu ändern. Also so z.B.:
1
void init(){
2
     //Initialisierung
3
}
4
5
void main(){
6
     // Variablen deklarieren
7
     init();
8
     while(1){
9
          //Programm
10
     }
11
}


Wenn du die Variable in keiner Funktion deklarierst (in deinem Fall 
weder main() noch init() ) sind das globale Variablen, d.h. du kannst 
von jeder Funktion drauf zugreifen. Du kannst dann aber lokalen 
Variablen (innerhalb einer Funktion) nicht den selben Namen geben, 
logischerweise.

Arbeite einfach die tutorials durch, dann läuft das schon.

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.