-         

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

Thema: PIC und Akte X

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    19.11.2007
    Alter
    33
    Beiträge
    140

    PIC und Akte X

    Anzeige

    Servus,

    ich habe gerade ein komisches Problem.
    Und zwar möchte ich den PIC(16F877A) direkt auf der Platine programmieren und will mir dazu das ICSP Kabel von sprut.de nachbauen.
    Um dies zu bewerkstelligen trenne ich VDD, die Pins RB6 und RB7 sowie MCLR über Jumper von der restlichen Schaltung. (High Voltage Programming)
    Jetzt waren aus Zufall die Jumper von MCLR und VDD offen und der PIC läuft trotzdem ohne Versorgungsspannung. Also auf dem Display wird wie gewollt etwas angezeigt so wie es sein sollte. Auch die Kommunikation mit dem EEPROM funktioniert?!?!?

    Aber ohne VDD? Kann mir das jemand erklären?! Ohne MCLR würde ich noch nachvollziehen können aber ohne die Versorgungsspannung. Wird der PIC dann über die PORTS gespeist?

    Gruß

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    20.08.2004
    Ort
    Unterschleissheim
    Beiträge
    218
    Hi

    da sind intern Clamp-Dioden an jedem Pin gegen VDD und VSS. Wenn jetzt an einem beliebigen Pin ds PIC eine Spannung anliegt, und diese Spannung größer ist als die Spannung an VDD, fliesst Strom dorthin ab.

    Gerhard

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    19.11.2007
    Alter
    33
    Beiträge
    140
    Servus,

    okay, so ganz verstehe ich das nicht aber gut.

    Dann hätte ich da noch eine Frage bzw. ein Problem.
    Und zwar wollte ich mir eine Wetterstation basteln. Soweit so gut.

    Ich habe insgesamt 10 Quelldateien (.asm), die für unterschiedliche Sensoren, das LCD, ADC usw. verantwortlich sind. (Um das ganze übersichtlich zu machen)
    In meiner Main rufe ich dann nach und nach die eizelnen Routinen auf. Einzeln funktioniert das auch super aber wenn ich Temperatur.asm, Feuchte.asm und zusätzlich Druck.asm zusammen einbinde, ohne irgendetwas aus der Druck.asm Datei aufzurufen, funktioniert auf einmal meine Temp. und Feuchtemessung nicht mehr.
    Diese gibt dann irgendeinen sinnlosen Wert aus. Lösche ich die Druck.asm Datei aus den Source Files in MPLab funktioniert das ganze wieder einwandfrei. Die Adresszuweisung für die Variablen kann es nicht sein, darauf habe ich geachtet.
    Kann mir das jemand erklären? Ich habe absolut keinen Plan mehr

    Achja, was macht der Befehl CODE? Also z.B. Prog1 Code? Gibt das nur an, dass jetzt Code folgt oder wofür ist das zuständig.
    Danke

    Gruß

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    13.08.2005
    Beiträge
    195
    hallo

    wenn du uns nicht die quelldateien zeigst, können wir nur raten. am einfachsten wäre es, wenn du es hier einfach postets, am besten in solche [ code ][ /code ] kästchen, dann bleibt es schön übersichtlich.

    sonst fällt mir auch nur ein was ein:
    evtl. ist es zu viel code, dass du über die 1. page hinauskommst?

    was auch immer hilfreich beim fehler suchen ist, ist die *.lst datei. da kann man überprüen wie die einzelnen asm-files zusammengesetzt werden.

    SEIDL.

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    19.11.2007
    Alter
    33
    Beiträge
    140
    Servus,

    kannst du mri das mit der 1. page genauer erklären? Wie groß ist diese?
    Ich werde dann heute Abend den Code posten...
    Gruß

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    13.08.2005
    Beiträge
    195
    hallo

    eine page ist beim 16f877a 2048 befehle lang. dann muss man dem controller, wenn man durch einen call oder goto befehl velässt mit dem pclath register sagen, zu welcher page man springt. (siehe auch hier im rn-wissen)

    SEIDL.

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    19.11.2007
    Alter
    33
    Beiträge
    140
    Servus,

    okay... und ich dachte dass das bei Programmcode egal ist sondern nur bei den Registern so ist also mit den Banken...
    Nu ja das wäre ien Erklärung
    Gruß

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    19.11.2007
    Alter
    33
    Beiträge
    140
    So nochmal ich....

    ich glaube ich habe das jetzt verstanden. Bisher habe ich noch kein so großes Programm geschrieben.
    Also ich brenne 2450 Befehle, somit muss ich irgendwann in die Page 1 springen. Der Übergang ist direkt in der druck.asm Datei.
    Wie mache ich das jetzt am geschicktesten? Wäre es sinnvol beispieslese mit ORG 0x800 die druck.asm komplett in die erste Page auszulagern und dann jedes mal mit
    bcf PCLATH,4
    bsf PCLATH,3
    in die Page 1 zu wechseln, wenn ich die druck.asm Datei aufrufe bzw eine Routine daraus?!
    Vielleicht sollte ich mir dann gleich angewöhnen, die Datein mit ORG zu organisieren.
    Oh man...
    Gruß

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    13.08.2005
    Beiträge
    195
    genau. allerdings musst du dich auch um pclath kümmern, wenn du in druck.asm eine routine von einer anderen datei, bzw eine routine in page0 aufrufst.

    um das zurückspringen mit return brauchst du dich dann aber nicht mehr zu kümmern, das geht automatisch.

    du kannst auch ein "directive" verweden:

    PAGESEL wait
    call wait

    gpasm macht dann aus PAGESEL automatisch den code, den man braucht um pclath mit den richtigen werten zu füllen.

    This directive will generate page selecting code to set the page bits to the page containing the designated <label>. The page selecting code will set/clear bits in the STATUS for 12 bit and 14 bit devices. For 16 bit devices, it will generate MOVLW and MOVWF to modify PCLATH. The directive is ignored for enhanced 16 bit devices.
    SEIDL.

  10. #10
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    19.11.2007
    Alter
    33
    Beiträge
    140
    Servus,

    also ich habe da dann doch noch mal eine frage zu.
    Main Page 0
    LCD Page 1
    Ich springe in meiner Main mit call in die die LCD_ROUTINE. In der LCD-Routine springe ich mit call in die Subroutinen, wie LCD_LINE_1, LCD_LINE_1, Busy-Flag usw. Nach einen RRETURN bin ich ja wieder auf Page 0... wie mache ich das nun?

    Gruß

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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