Forum: Mikrocontroller und Digitale Elektronik PIC Einsteiger


von Lukas (Gast)


Lesenswert?

Hallo miteinander,
ich habe da so eine Frage...
Ich habe mir ein kleines "PIC-Entwiklungsboard gebastelt" hatt ein paar 
Schalter und LEDs und ein LCD-Display
Das Board funktioniert soweit ich es bis jetzt testen konnte (habe ein 
kleine Lauflicht gemacht) einwandfrei.
Ich habe dann versucht ein Programm zu schreiben welches eigentlich nur 
kleine Funktion haben sollte:
Wenn ich auf den 1. Taster dann sollte die 1. LED leuchten und wenn ich 
loslasse dann sollte die LED wider ausgehen, und das für vier Taster und 
4 LEDs. Kurz zur Hardeware:
Die LEDs sind (Über Vorwidersstände)an den Ports:

RA0  2  LED1
RA1  3  LED2
RA2  4  LED3
RA3  5  LED4

Die Taster (gehen auf Versorgungsspannung +) habe ich über Pulldown 
(Widerstand von Port nach Masse (4,7k)) an den Ports:

RA4  6  Taster 1
RA5  7  Taster 2
RC1  16  Taster 3
RC2  17  Taster 4

angeschlossen.
Als PIV verwende ich den PIC18F4550
Ich habe eine stabile 5V Versorgung und einen 20MHz Quarz angeschlossen.

Nun zum Programm welches meiner Ansicht nach nicht Funktioniert:
1
   /** I N C L U D E S **********************************************************/
2
#include <p18cxxx.h>
3
 
4
5
/** Configuration ********************************************************/
6
#pragma config FOSC = HS   //CPU=20 MHz
7
#pragma config PWRT = ON
8
#pragma config BOR = OFF
9
#pragma config WDT = OFF  //Watchdog Timer
10
#pragma config LVP = OFF  //Low Voltage ICSP
11
12
/*
13
#define led1  LATAbits.LATA0
14
#define led2  LATAbits.LATA1
15
#define led3  LATAbits.LATA2
16
#define led4  LATAbits.LATA3
17
*/
18
#define led1  PORTAbits.RA0
19
#define led2  PORTAbits.RA1
20
#define led3  PORTAbits.RA2
21
#define led4  PORTAbits.RA3
22
#define taster1  PORTAbits.RA4
23
#define taster2  PORTAbits.RA5
24
#define taster3  PORTCbits.RC1
25
#define taster4  PORTCbits.RC2
26
27
/** D E C L A R A T I O N S **************************************************/
28
#pragma code
29
30
void main(void)
31
{
32
  while(1)
33
  {
34
  if (taster1 == 1) {
35
    led1 = 1;
36
  } else {
37
    led1 = 0;
38
  }
39
  if (taster2 == 1) {
40
    led2 = 1;
41
  } else {
42
    led2 = 0;
43
  }
44
  if (taster3 == 1) {
45
    led3 = 1;
46
  } else {
47
    led3 = 0;
48
  }
49
  if (taster4 == 1) {
50
    led4 = 1;
51
  } else {
52
    led4 = 0;
53
  }
54
  }//end while
55
}//end main

Meine Vermutung ist das ich die Ports falsch definiere, meine das Port 
zu einem Ausgang oder Eingang "umwandeln".

Ich hoffe es kann mir bitte Jemand Helfen
Wäre auch sehr Dankbar wenn mir jemand sagen kann wo ich ein Gutes Forum 
für den Microchip C18 Compiler finden kann, habe auch schon die Sprut 
Homepage durchgelesen und Versucht zu verstehen (Programmiere aber 
keinen Assembler)

Grüße
Lukas

von Lukas B. (lukas-1992) Benutzerseite


Lesenswert?

Habe mich jetzt auch bei euerem Forum angemolden

Grüße
Lukas

von Mueller (Gast)


Lesenswert?

Sehe mal auf Sprut.de.

von Lukas B. (lukas-1992) Benutzerseite


Lesenswert?

Das habe ich schon, leider Programmiert Sprut fast ausschließlich in 
Assembler bis auf wenige C18 Beispiele (Blink LED) welches ich auch 
schon gemacht und auch verstanden habe. Leider stehe ich jetzt auf dem 
Schlach wie ich Ports einlese

Grüße
Lukas

von morph1 (Gast)


Lesenswert?

es fehlt die umschaltung auf ausgänge -> TRISA

ausgänge werden beim 18er pic über die latches angesprochen -> LATA 
statt PORTA, das verwendet man besser nur zum einlesen.

von Bernd (Gast)


Lesenswert?

Oje,

Du mußt die Ports, die Du als Ausgang benutzt, immer auf Ausgang 
schalten! siehe TRISA.

PortA ist oft für den ADC verwendet. Dort sieh mal nach, wie Du die 
Ports als digital schaltest (statt als analog-Eingang).

Dann sieh Dir das Datenblatt zu den Ports an, ob da evtl. noch 
Analog-Comparator-Funktionen vorhanden sind, die müssen i.a.R. auch 
deaktiviert werden.

In aller Regel sind PORTA für analog-In, PORTB für alle (starken) 
Ausgänge und Inputs (für Interrupts) und PORTC sind dann viele weitere 
Module...
Aber im Grunde kannst Du alles anklemmen, wie Du das hast, wenn es nur 4 
LEDs und 4 Taster sind.
Bei den Tastern kannst Du die integrierten Pull-Up-Widerstände in PortB 
nutzen. Dann schalten die Tasten gegen Masse und die integrierten 
Pull-Ups in PortB (RBPU) werden eingeschaltet...

Aber ließ mal auf Sprut.de und in den Datenblättern !

von Lukas B. (lukas-1992) Benutzerseite


Lesenswert?

Danke für eure Tipps bin dran sie umzusetzen bzw. das Datenblatt 
durchzuackern (da steht verdammt viel drin auf den 430 Seiten).
Da ich einige Programmiererfahrung in Visual Basic und C# habe, bin ich 
mir von dort her gewöhnt wenn ich zum Beispiel buttom1. eintippe kommt 
ein "Auswahlmenue" und ich kann dann z.B. Name auswählen und dann kommt 
meistens eine "Programmierhilfe" und ich weiß was ich machen soll.
Ich denke sowas in der Art wäre für den Einstieg in C18 sehr sinnvoll, 
kan mir daher jemand sagen ob es sowas gibt?

Grüße Lukas

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.