Pic mit C programmieren aber wie?

Gast #1937506
Lesenswert?

Hallo,

ich bin seit ein paar Tagen dabei mir an zu eignen, wie ich mit C einen 
Pic programmiere. Nun jetz habe ich schon einige Tuturials durch 
gearbeitet aber ich werde noch immer nicht ganz schlau draus, wie ich 
bei den Pic die einzelnen Ports und Pins anspreche. Diese als Ausgänge 
def. und als Eingänge genauso. Es wird immer nur erklärt wie ich z.B. ne 
Schleife schreibe etc. aber nie wie ich nen Port richtig beschreibe. 
Hoffe ihr könnt meine Wissenlücke füllen Zwinkernd^^.
schönen Dank schonmal

Mfg
Gast #1937514
Lesenswert?

okey danke ehm. dieses LATA ist das jetz für PORTA ne? und wenn ich z.B. 
PORTA,5 auf 1 haben will, dann muss ich das binär für mich machen 
b'00001000'und das dann in ne hex umwandeln? und das dann beo TRISA 0x08 
schreiben? Oder wie
Gast #1937521
Lesenswert?

#include <pic16f887.h>

void main (void);
{
  TRISB 0x00;
  int 1,2,3,4,5,6,7,8,9;
        for (i=0;i<=8;i++)
 {
  TRISB 0x00=1;
  TRISB 0x01=2;
  TRISB 0x02=3;
  TRISB 0x03=4;
  TRISB 0x04=5;
  TRISB 0x05=6;
  TRISB 0x06=7;
  TRISB 0x07=8;
  TRISB 0x08=9;
 }
}

So hab ich jetz jeden Pin einzeln ne Zahl zugewiesen oder ist das 
falsch? Oh man es tut mir leid das ich so dumm frage. :(
Gast #1937529
Lesenswert?

LATA und TRISA sind für Port A gedacht, ja.
Mit TRIS legst du fest ob der Pin ein Eingang oder Ausgang ist.
Mit LAT gibst du ein high oder low aus.

Du musst es nicht in hex zahlen machen, binär geht auch.

Ich nehm mal an dass du Anfänger bist. Für den Einstieg mit PIC und C 
Programmierung empfehl ich immer wieder gern sprut.de
Gast #1937536
Lesenswert?

Ja also Anfänger schon, habe aber bereits C für Pc anwendungen kennen 
gelernt und komme da eingermaßen klar. Jetz will ich das nur auf nen Pic 
anwenden. :) Ja gut binär oder hex is egal das stimmt^^ aber hex sieht 
professioneller aus findsch xD. Und wie mach ich es wenn ich nur einen 
Pin dann ansprechen will? will z.b. mit PIN4 von PORTA ne LED leuchten 
lassen wenn da ein Signal anliegt.
Gast #1937630
Lesenswert?

Dann muss ich doch wenn ich ne Bedingung schreibe und da z.b. den PinB 1 
ne Bedingung geben will das so schreiben oder?

void main (void);
{
for (i=0;i<=8;i++)

 while();

  if (i=1)
   {
  LATB 0x01=1;
   }
}
müsste doch so aussehen ne? Also soll nen Zähler werden und bei einen 
bestimmten Wert soll jetz erstmal iwas an gehen. In dem Fall soll wenn 
i=1 ist auf PortB Pin1 ne eins ausgegebn werden.
Gast #1937664
Lesenswert?

ja danke. Bin ja shcon dabei mich weiter zu belesen xD gehe gerade 
semtliche Tuturials durch. Aber ist mein 2tes Prgorammbeispiel schon 
richtg? Oder könntet ihr mir mal zeigen wie man das richtig schreiben 
muss? :)
#1937675
Lesenswert?

Eggi schrieb:
> das das nen UND und ein ODER ist weiß ich aber wusste nicht das man dort
> löscht mit nem oder

Das ergibt sich aus der Funktion.

Das ist so wie wenn du sagst: Ah, eine Multiplikation braucht man also 
um die Fläche eines Rechtecks zu berechnen.

In einem gewissen Sinne stimmt das natürlich. Aber das ist das Pferd von 
hinten aufgezäumt. Eine Fläche wird durch Multiplikation bestimmt und 
nicht Multiplikation braucht man um Flächen zu berechnen.


Das man UND und ODER zum Setzen/Löschen von Bits benutzen kann, ergibt 
sich zwangsläufig, wenn man sich mal ansieht, was dabei auf binärer 
Ebene passiert.
#1937683
Lesenswert?

1
  if (i=1)

und du bist sicher, dass du hier eine Zuweisung haben willst und keinen 
Vergleich?


Deine Aussage, dass du zumindest ein bischen Erfahrung mit C hast, wird 
immer unglaubwürdiger.

Diese Aussage wurd hier
Beitrag "Re: Pic mit C programmieren aber wie?"
schon das erste mal schwer erschüttert. Denn dieses Codeschnipsel ist 
alles mögliche, nur kein C. Das ist von C soweit entfernt, wie 
Chinesisch keine romanische Sprache ist.

Tu das nicht. Wenn du C nicht kannst, dann sag das auch und mach dir 
selbst nichts vor. Dann fallen die Antworten hier nämlich auch so aus, 
dass sie auch ein Einsteiger verstehen kann. Aber wenn du sagt, du 
kannst schon C, dann setzen wir hier auch ein wenig Können vorraus. Und 
wenn sich dann heraus stellt, dass du dieses Können nicht hast, dann ist 
das ganz schlecht.
Gast #1937686
Lesenswert?

@picer: Okey ja das mit dem TRISA habe ich ja schon geändert jetz :) und 
ads mit dem LAT da bin ich ja gerade dabei das zu verstehen sy das das 
gerade noch nicht klick gemacht hat.

> LATB 0x01=1;
bei dem dachte ich das ich allgemein den PORTB anspreche und dann sage 
das "0x01" <--also b'00000001' Pin 1 ne 1 haben soll wenn iwas passiert.
Gast #1937687
Lesenswert?

Ich habe gesagt das ich mit den C programmieren auf für PC anwendungen 
wie man auch anfängt zu lernen klar komme. Aber tut mir leid Um es ma so 
aus zu drücken ich bin ein Krümel im Kuchen.

und mir der if (i=1) wollte ich sagen, das wenn i ne 1 hat soll das und 
das passieren.
#1937692
Lesenswert?

Eggi schrieb:

>> LATB 0x01=1;
> bei dem dachte ich das ich allgemein den PORTB anspreche und dann sage
> das "0x01" <--also b'00000001' Pin 1 ne 1 haben soll wenn iwas passiert.

C ist eine genormte Sprache.
Du kannst nicht einfach deine eigene Syntax erfinden und dann hoffen, 
dass der Compiler dich schon versteht.
DU musst nach den Regeln der Sprache spielen und nicht umgekehrt.

Das was du da hast, ist noch nicht einmal C. Das ist von C meilenweit 
entfernt.
#1937696
Lesenswert?

Eggi schrieb:
> Ich habe gesagt das ich mit den C programmieren auf für PC anwendungen
> wie man auch anfängt zu lernen klar komme. Aber tut mir leid Um es ma so
> aus zu drücken ich bin ein Krümel im Kuchen.
>
> und mir der if (i=1) wollte ich sagen, das wenn i ne 1 hat soll das und
> das passieren.

Ich hab schon verstanden, was die Idee dahinter ist.
Aber auch hier bezweifle ich wieder diesen Satz in deiner Antwort:

> Ich habe gesagt das ich mit den C programmieren auf für PC anwendungen
> wie man auch anfängt zu lernen klar komme.

Du kommst eben nicht damit klar. Dieser = versus == Fehler ist ein ganz 
banaler Anfängerfehler, den jeder mal macht. Aber spätestens nach dem 5. 
oder 6. Programm hat man sich daran gewöhnt, und diese Art von Fehler 
wird deutlich weniger häufig. 5. oder 6. C-Programm! Denn dieser Fehler 
ist in keinster Weise PIC spezifisch.


Mein Rat lautet:
Schreib deine ersten Programme auf dem PC. Du kannst dazu so ziemlich 
jedes Lehrbuch benutzen, das du findest. Du kannst dazu so ziemlich 
jedes C-Tutorial benutzen welches du findest. Und dann, wenn du deine 
ersten Programm auf dem PC geschrieben hast (geschrieben, nicht gelesen. 
Du musst selber programmieren!), dann kannst du auf den PIC wechseln und 
wirst deutlich weniger Probleme haben, weil du keinen 2 Frontenkrieg 
mehr im Gange hast, sondern zumindest soviel von C verstehst um ein 
Gefühl dafür zu haben, ob eine Schreibweise überhaupt C sein kann oder 
nicht.
Gast #1937697
Lesenswert?

OK, ich programmiere jetzt nich PIC, aber allgemein sollte schon mal 
klar sein, das mit LATB der gesamte PORRTb gemeint ist. Der hat 
1Byte=8Bit welche du nun setzen oder löschen kannst.

schreibst du z.B.
LATB = 3;
so sind die unteren beiden BIT, also PIN B0 und PIN B1 gesetzt.
In binäreer Schreibweise wird das klaren:
LATB = 0b00000011; // 3 entspricht 0b00000011

Durch diese schreibweise überschreibst du aber auch jedes mal den PORT, 
deswegen die Anmerkung mit dem ODER;

Also, zB:
LATB = LATB = 0b00000001; // Port B hart auf 1 schreiben
LATB |= 0b00000010;  // nimm PORTB und verodere den mit 0b00000010

jetzt steht in LATB ebenso 0b00000010, da
        0b00000010
oder    0b00000001
        ----------
        0b00000011
Gast #1937750
Lesenswert?

@Karl heinz Buchegger:

Ja gut dann werde ich mich wieder mit dem C am Pc auseinander setzen und 
das festigen was ich schon kann und was ich nicht kann werde ich 
schleunigst nachholen!

@picer:

Danke für die Erklärung :)

Ich werde mich dann mal ans werk machen.

Schönen Tag euch noch
#1937800
Lesenswert?

Hallo Eggi!

Ich kann Dir auch die Webseite von Mikroelektronika (www.mikroe.com) 
empfehlen.

Hier besonders die Seiten
www.mikroe.com/eng/products/view/11/book-pic-microcontrollers/

und das Handbuch vom C-Compiler, zu finden als PDF auf der Seite
www.mikroe.com/eng/products/view/7/mikroc-pro-for-pic/

Gruß
Johannes
Gast #1937894
Lesenswert?

ich spiele auch schon länger mit dem Gedanken wieder in die Programmier 
Welt einzutauchen.

Hatte vor 10 Jahren während meiner Ausbildung mal mit 8051, 8085 mit 
Assembler angefangen und während dem Gundstudium ein bisschen C.

Aber so richitg durch gestiegen bin ich nie, war mir irgendwie zu 
abstrakt.
Mir fehltne als Etechniker immer die Bildchen (ähnlich wie bei einer 
Schematic), um mir etwas darunter vorzustellen.

Habt ihr mir einen Tipp wie ich es vielleicht doch noch schaffe,
dass ich ein bisschen programmieren kann.

Das wird im Job immer wichtiger, will nicht als reiner Hardware-Mann auf 
dem Abstellgleis landen.
Gast #1937917
Lesenswert?

hallo wayneintersierts,

dann Willkommen im Club^^. Wir könnten uns zusammen tun ^^. Wenn du was 
mit Bilder suchst kenn ich da was ;). Nen Arbeitskolege von mir der 
programmiert mit LabView. Da setzt man alles wie ein Stromlaufplan 
zusammen.
#2695090
Lesenswert?

Hallo Leute,

ich habe folgendes Problem.

ich arbeite mit dem mplabx und dem c18 compiler.

mit dem pic18lf45k22 sollen am ausgang (RD3, RD2, RD1, RD0, RC4, RC3, 
RC2, RC1,RE0, RA5, RA4, RA3, RA2, RA1) 12 led´s zum blinken gebracht 
werden.
Hierzu habe ich einen C code geschrieben. Ich lasse das debugger laufen 
und krige die folgenden 4 error angezeigt!

1.configuration setting 'PWRT' not recognized
2.configuration setting 'BOR' not recognized
3.configuration setting 'WDT' not recognized
4.syntax error ->  TRISA = 0b.1100.0001;


Wo könnte das Problem liegen? Was ist bei dem Code zur korrigieren?! Ich 
Programmiere zum ersten mal einen µC. Für eure hilfen bin ich schonmal 
im voraus sehr dankbar!

Hier das C Code;

#include <stdio.h>
#include <stdlib.h>
#include <p18cxxx.h>
#include <delays.h>

/*Configuration*/

#pragma config FOSC = XT //CPU = 4MHz
#pragma config PWRT = ON //Power Up Timer
#pragma config BOR = OFF //Brown of Reset Voltage
#pragma config WDT = OFF // Watchdog Timer
#pragma config LVP = OFF // Low Voltage ICSP


/*Decleration*/
#pragma code
void main(void)
{

    LATA = 0x00;
    LATC = 0x00;
    LATD = 0x00;
    LATE = 0x00;

    TRISA = 0b.1100.0001; // EIN und AUSGÄNGE Definiert 0xA1
    TRISB = 0b.1111.1110; // EIN und AUSGÄNGE Definiert 0xFE
    TRISC = 0b.1110.0001; // EIN und AUSGÄNGE Definiert 0xE1
    TRISD = 0b.1111.0000; // EIN und AUSGÄNGE Definiert 0xF0
    TRISE = 0b.0000.1110; // EIN und AUSGÄNGE Definiert 0x0E

    while(1)
    {
        LATA = 1;
        LATC = 1;
        LATD = 1;
        LATE = 1;
        Delay10KTCYx(100); // Warteschleife
        LATA = 0;
        LATC = 0;
        LATD = 0;
        LATE = 0;
        Delay10KTCYx(100); // Warteschleife
    }



}
Gast #2695253
Lesenswert?

Eggi schrieb
>Ich habe gesagt das ich mit den C programmieren auf für PC anwendungen
>wie man auch anfängt zu lernen klar komme. Aber tut mir leid Um es ma so
>aus zu drücken ich bin ein Krümel im Kuchen.


Was rauchst Du eigentlich für Zeug?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren