-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 17

Thema: Einstieg in PICs

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    14.04.2005
    Ort
    Freiberg
    Alter
    34
    Beiträge
    283

    Einstieg in PICs

    Anzeige

    Hallo,

    aaaaaaaaaaalso, ich bin nun mal eben etwas neu hier, wie unschwer zu erkennen ist. Ich will nun in die "höhere" Elektrotechnik einsteigen. Dafür hab ich mir von Conrad das VM111 PIC-Programmer and Experimentation Board (Velleman) zugelgt, wo ein PIC16F627 und ein paar Beispiel-asm's drinnen waren (und die Datenblätter der PICs). Allerdings ist keine ansatzweise Form von Tutorial vorhanden und die Beispiele sind nur äußerst dürftig dokumentiert. Deshalb die Frage: gibt's ein paar vernünftige Tutorials für diese Programmiersprache und/oder im Idealfall eine Art Wörterbuch der Kommandos mit Erklärungen irgendwo im Netz?
    Und hier noch ein paar grundlegende Fragen:
    Warum hat der PIC16F627 18 Pins? Müsste der nicht 16 haben?
    Ist ein PIC auch "nur" ein Prozessor?
    Was ist der I2C-Bus?
    Kann mir diese Seite hier:http://www.avr-asm-tutorial.net/ helfen?
    Vielen Dank für eventuelle( ) Antworten!
    MfG

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    17.08.2004
    Beiträge
    1.065
    das beste was du finden kannst ist www.sprut.de
    hier wird hauptsächlich der pic 16f84 benutzt, aber auch einige andere. sehr informativ, umfangreich und ne menge beispiele. das lässt sich alles auch auf den 16f627 umsetzen, die kommandos sind ausführlich erklärt und identisch zu allen 16fs und mit dem datenblatt von deinem controller klappt alles.

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    17.08.2004
    Beiträge
    1.065
    ups hab im eifer was überlesen

    also das mit den 18 pins stimmt schon, unter http://www.sprut.de/electronic/pic/typen.htm#typen findest du ne menge pics, da steht auch deiner drin

    ein pic ist "nur" ein prozessor, was willst du mehr. er hat eigentlich alles was man braucht, ram, einen beständigen speicher, er arbeitet mit 8bit, was für die meisten sachen reicht, kann hardwaremäßig leider keine multiplikation und den nachteil, dass er mit einem 12mhz quarz nur 3mhz wirklich raus bekommt, da der takt intern nur ein viertel beträgt. jeder prozessor hat vor und nachteile. vor allem die große community der atmel fans haben mich immer wieder straucheln lassen ob ich beim pic bleiben soll.
    und der I2C bus:
    also das ist ein serieller bus der zur verbindung von ic untereinander benutzt wird. I2C oder iic steht für inter ic c... verdammt, das letzte ist mit entfallen. naja, auf jedenfall kommt er mit einer takt und einer datenleitung aus. du kannst ne menge ics anschließen, dein controller ist der master und kann jedes ic ansprechen und von ihm lesen oder schreiben. I2C ics haben eine standartadresse, mit jumpern kann man die leicht ändern und so bis zu 6 ics der selben sorte betreiben. ist ein sehr hilfreiches ding der I2C bus. was willst du denn mit dem pic machen?

  4. #4
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    14.04.2005
    Ort
    Freiberg
    Alter
    34
    Beiträge
    283
    Jo, (um mal den Gruß der 30er Jahre zu verwenden)

    vielen Dank für die raschen Antworten. Sprut hat schonmal nen guten Eindruck vermittelt.
    @the_Ghost666
    ok, dier Schwerpunkt lag auf "Gehört er auch zur Kategorie der Prozessoren". Sicher brauch ich für den Anfang erstmal nicht wirklich viel (bzgl. Hardware). Also Ziel ist es erstmal die Programmiersprache kennenzulernen, und da geht's irgendwie schon gut los: irgendwie kommt es mir vor, als würden die Programmcodeauszüge, die ich auf diversen Seiten finde einer anderen Sprache angehören, als jene, die ich verwenden soll(te). Es wurde vereinzelt auch von nem Compiler geredet, den ich (logischerweise) nicht kenne. Da steht nun die Frage: Gibt's da Compiler, bei denen man quasi im C- oder BASIC-Style programmieren kann und der Kompiler dann den Rest macht? (habe aber kein Interesse mich durch ein solches zu fuchteln) Sprich bei mir sieht's so in etwa aus:
    ...
    OPTION_REG EQU H'0081'
    TRISA EQU H'0085'
    TRISB EQU H'0086'
    ...
    ;INPUTS
    SW1 EQU H'00'
    SW2 EQU H'01'
    ...
    MENU CLRF PORTB
    ;
    BTFSC PORTA,SW1
    GOTO EFFECT_1
    ...
    Programmcode also in NotePad o.ä. +Kompiler = Maschinensprache blablabla
    Multiplikationen also nicht!? Divisionen logisch dann auch nicht...
    mmh
    wie sieht's mit Addition/Subtraktion aus (wie sieht beispielhaft eine Rechenoperation aus)?
    Gehen if-tests?
    Ist festgelegt, welche Pins als Eingang und welche als Ausgang fungieren, oder kann man das ändern? (Wie?)
    Mein Vorhaben: ich habe jetzt erstmal auf der Experimentierplatine 6 LEDs und 4 Tastschalter drauf sitzen, mit denen ich etwas rumspielen kann. Ich denke mein nächstes Ziel ist das Rumspielen mit logischen Operationen (AND, OR, NOR, NAND) und ggf. mit den if-Fragen, später dann auch den Rechenoperationen. Gibt's da ein paar (erklärende) Beispiele irgendwo, oder hätte jemand von Euch Bock mir was (grundlegendes) beizubringen? (wenn nicht, dann freu ich mich trotzdem über jede geschenkte Webseite mit gleichwertigen Inhalten! )
    Vielen Dank nochmal.

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    17.08.2004
    Beiträge
    1.065
    erstmal , wie weit bist du denn mit deinen elektronikkenntnissen, ich bin nämlich selbst nicht besonders weit und hab mir alles selbst beigebracht.
    Für PICs gibt es eine Reihe von Compilern, erstmal einen der deinen Assemblertext in ein benutzbares hex-file compiliert, das ist dein beispiel da oben, der microship assembler. unter 40 befehle und eigentlich ganz einfach aufgebaut. sprut hat da ne menge beispiele. den compiler und eine entwicklungsumgebung gibts bei microchip gratis und heißt mlab. sehr gutes prog. auch laut der zeitschrift elektor.
    für C brauchst du andere compiler, unter cc5x findest du einen privat kostenlosen compiler, einfach googlen. ebenso einer ist der ccs compiler. er ist kostenpflichtig, aber es gibt ne eingeschränkte demo. ebenso einfach googeln. was basic angeht hab ich keinen schimmer, aber es gibt sicher einen compiler dafür. ich kenn ihn nur leider nicht.

    moment, gleich gets weiter mit dem rest der fragen

  6. #6
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    14.04.2005
    Ort
    Freiberg
    Alter
    34
    Beiträge
    283
    Also sagen wir mal so: Elektrotechnik ist kein Problem, Elektronik...da steh ich noch quasi am Anfang. Wie gesagt, einen anderen Compiler will ich nicht benutzen, ich will stattdessen gleich in die unverblümte und konkrete obige Sprache einsteigen. Da hat ja Sprut auch mein ersehntes Wörterbuch der Programmierbefehle.
    Aber noch eine Frage: Wie sieht's mit der Verwaltung mit Variablen aus? Kann ich mehrere gleichzeitig verwalten? Wie definiere ich Vars?
    Gruß

  7. #7
    Gast
    das was du da oben hast ist wie ich es sehe der normale Microchip assembler.
    er benutzt die befehle die im datenblatt oder bei sprut stehen.
    ifs kann er naja nicht so einfach wie in c.

    erstmal die variablen, du sprichst damit direkt speicherzellen an. mit dem befehl
    x equ 0x07 weißt du der speicherzelle 07h den namen x zu.

    leider ist es nicht so einfach damit zu arbeiten, der pic hat ein arbeitsregister, W. du kannst nicht direkt 2 speicherstellen verknüpfen sondern immer nur eine mit W oder aber W mit einer constante.

    als beispiel
    var1 equ 0x30
    var2 equ 0x31

    movfw var1
    addwf var2,f

    damit nimmst du den wert von var1, schiebst in in w, addierst w mit var2 und speicherst das ergebnis in deiner speicherzelle (f) var2.

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    17.08.2004
    Beiträge
    1.065
    was bei c das x++ ist, ist hier das incf x. das geht schneller als +1 mit dem obrigen beispiel.

    für ifs benutzt du den btfss oder btfcs befehl. das steht für bit test, if set (clear) skip. wenn die bedingung erfüllt ist oder nicht, überspringt er den nächsten befehl, das wäre dann ein goto, das zur verzweigung führt.

    btfss RB0
    goto led_an
    goto led_aus

    so, wenn an port rb0 nun eine led ist, und sie 1, also an ist. dann überspringt er led_an und geht zu led_aus.

    zu den ports, dein controller hat nur i/o pins. die kannst du frei als eingang oder ausgang definieren. andere pics haben noch analog oder comparator module oder serielle interfaces. da kann man sich dann entscheiden ob es ein normaler io port ist, oder ob es ein analogeingang ist, ein comparatoreingang oder eben ein teil des interfaces

  9. #9
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    14.04.2005
    Ort
    Freiberg
    Alter
    34
    Beiträge
    283
    Hallo,

    vielen Dank für die Beschreibungen. So habe ich damit jetzt erfolgreich das hier umgesetzt:
    Taster1 lässt LEDs der reihe nach aufleuchten, wenn alle an sind der Reihe nach wieder aus (Befehlsabfolge)
    Taster2 zählt vom aktuellen Stand (etwa von Wert des T1-Leuchtens) binär genau 8 Schritte runter (per Laufvariable).
    Taster 3 und 4 erhöhen bzw verringern den Wert jeweils um eins.
    Nun ist aber folgendes Problem: nicht selten zählt er bei betätigen von T3 oder T4 nicht nur ein, sondern zwei oder drei Mal nach oben oder unten. (Geht sehr schnell, sodass die 2^0-LED manchmal nichtmal blitzt) Kann man dagegen was machen?
    Und so hätte ich jetzt schon die nächste Frage:
    Wie funktionieren die ANDWF, ANDLW, IORLW, usw.? Die Erklärungen auf Sprut leuchten mir nicht so wirklich ein. Was kann ich damit verknüpfen und wie und inwiefern bringt mir das was?
    Vielen Dank nochmal für Eure Bemühungen!
    MfG

  10. #10
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.10.2004
    Ort
    Nordschwarzwald
    Alter
    34
    Beiträge
    506
    1.) die Mehrmalsbetätigung des Tasters nennt sich "prellen". Am einfachsten vermeidest du das, indem du noch abfragst, ob der Taster wieder losgelassen wurde und dazwischen ne pause machst...
    Das sieht dann ungefähr so aus:
    Prüfe Taster T1, wenn gedrückt, dann Routine für T1.
    -> Routine T1 -> deine normale Routine, wie bisher...
    -> Marke T1wait: Warteschleife (10-50ms, je nachdem wie stark dein Taster prellt)
    -> prüfe ob Taster losgelassen, wenn ja, dann Ende Schleife, wenn nein, dann gehe zu T1wait.
    Damit erzwingst du, dass die Taste losgelassen wird, bis die nächste Bearbeitung erfolgen kann.
    Und mit der Warteschleife erzwingst du, dass das eigentliche Hardware-Prellen des Tasters (bedingt durch das leichte Zittern des Fingers und ähnliche Effekte) sich nicht auswirken.

    2.) ANDWF (die anderen sind ähnlich)
    Was ist das überhaupt?
    AND W F bedeutet ganz einfach: Nimm das, was in F steht, verknüpfe es logisch UND mit dem, was in W steht und speicher das ganze dann in W ab.
    Logisch UND verknüpfen ist eigentlich ganz einfach:
    - Du hast in W 00011001 stehen.
    - Und in F steht 00001111.
    UND bedeutet dann, dass du die Schnittmenge bildest, d.h. alles wo beides auf 1 ist, ergibt auch 1.
    Ergebnis:
    0&0=0 W=00011001, F=00001111
    0&0=0 W=00011001, F=00001111
    0&0=0 W=00011001, F=00001111
    1&0=0 W=00011001, F=00001111
    1&1=1 W=00011001, F=00001111
    0&1=0 W=00011001, F=00001111
    0&1=0 W=00011001, F=00001111
    1&1=1 W=00011001, F=00001111
    Das Ergebnis wieder in W, damit steht dann in W: 00001001

    Das ganze geht über Wahrheitstabellen:
    A AND B = X: (und)
    Code:
      A
    B x|0|1
      0|0|0
      1|0|1
    A OR B = X: (oder, auch als Inklusiv-oder bekannt, daher IOR)
    Code:
      A
    B x|0|1
      0|0|1
      1|1|1
    A XOR B = X: (entweder - oder, auch als Exklusiv-oder bekannt)
    Code:
      A
    B x|0|1
      0|0|1
      1|1|0
    A NAND B = X: (nicht und)
    Code:
      A
    B x|0|1
      1|0|0
      1|0|0
    A NOR B = X: (nicht oder)
    Code:
      A
    B x|0|1
      0|1|1
      1|1|0
    A NXOR B = X: (nicht entweder-oder, sehr selten)
    Code:
      A
    B x|0|1
      0|1|0
      1|0|1
    Du hattest dann neben ANDWF noch ANDLW, das bedeutet nichts anderes als:
    W AND L -> W, dabei ist L ein sog. Literal, d.h. ein fester Wert, den du schon bei der Programmierung fest einträgst.
    Damit man das später noch schön lesen kann und du später nicht an tausenden Stellen im Programm nach dem Wert suchen musst, macht man das häufig über "Define"-Statements. Das sind Präprozessor-Anweisungen, die (automatisch) abgearbeitet werden, bevor dein Assembler drüber geht. Das include ganz am Anfang ist z.B. auch so eine Präprozessor-Anweisung (oder auch P.-Direktive genannt).
    Bsp:
    Code:
    #define WARTEZYKLEN     27         ;Anzahl der Totzyklen für Warteschleife
    Der Wert ist, sofern du nichts anderes angibst, dezimal.

    Btw. schau dir mal dein Include-File an, dort drinnen findest du jede Menge defines (eigentlich fast ausschließlich). Das komtm daher, dass da drinnen nichts mysteriöses steht, sondern nur in welchem Register sich was befindet - und das dann in Namen verpackt, so dass man nicht für jeden anderen Typ alles umschreiben muss (sondern nur noch kleinere Teile).

    Daher bietet es sich eigentlich fast immer an, mit Hilfe von equ und define "variablen" zu "definieren".

    MfG
    Stefan

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •