- 12V Akku mit 280 Ah bauen         
Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 30

Thema: PIC Fallen

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    73
    Beiträge
    11.077

    PIC Fallen

    Hallo!

    Ich habe das Thema geöffnet um Fallen vom PICs zu sammeln.

    Ich bin sehr dankbar für alle Warnungen im voraus. Solche Sammlung finde ich sehr nutzlich für alle die Programme entwickeln.

    MfG

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.12.2005
    Ort
    Euskirchen-Großbüllesheim
    Alter
    74
    Beiträge
    2.063
    Hallo PICture,
    hier ist eine weitere 'Falle': https://www.roboternetz.de/phpBB2/viewtopic.php?t=18526, hier sind noch mehr: http://www.domnick-elektronik.de/piccheck.htm bei 'Assembler-Programmier(er)-Fehler'
    MfG Karl-Heinz
    HobbyElektronik hier klicken ....

  3. #3
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    73
    Beiträge
    11.077
    Hallo kalledom!

    Vielen Dank für Deine Links. Weil es sich auf andere Typen von PICs erweitert hat, werde ich das Titel des Treads ändern.

    Schöne Grüsse
    Andreas

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    09.05.2004
    Ort
    Bielefeld / Paderborn
    Beiträge
    1.253

  5. #5
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    73
    Beiträge
    11.077
    Hallo!

    Es Betrift den PIC18F252, aber wahrscheinlich gilt für alle PIC18FXXX.

    Ich wollte, eine Sequenz:

    nop
    nop

    durch

    goto $+2

    ersetzen.

    Gemessene Ausführungszeit beträgt aber 3 anstatt 2 Takten. Natürlich ein Befehl $+1 schickt den Prozessor in "Nirvana", weil die Adressen nur gerade seien dürfen. Wen jemand eine Verzögerung um 3 Takte braucht, kann also "goto $+2" anwenden.

    Erklärung vom Microchip Forum, wo ich selbstverständlich nachgefragt habe:

    The second instruction word of all of the 2-word instructions has '1111' in its upper nibble. This will make it always execute as a 'nop'.

    If this weren't the case, a skip instruction followed by a 2-word instruction wouldn't work correctly since the PIC would execute something unintended. Execution would be unpredictable in that it would be determined by whatever happened to be in that second instruction word.

    MfG

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    14.04.2006
    Ort
    Stuttgart
    Alter
    44
    Beiträge
    321
    Absolut unqualifizierte Antwort aber ich konnte es mir leider nicht verkneifen
    Es ist Montag und mein Kopf ist noch beim booten...

    Bild hier  

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    27.01.2006
    Beiträge
    44
    Hallo PICTure,

    irgendwie stehe ich bei Deinem Problem auf dem Schlauch. Um drei Takzyklen zu warten, benutze ich folgende Sequenz:

    goto $+1
    nop

    Die Adresse wird in "words" gezählt, d.h. ein goto $+1 springt an den Beginn der folgenden Befehls. Bei mir jedenfalls funktioniert obige Sequenz tadellos (PIC16). Bei PIC18 hab ich noch nicht probiert, denke aber dass das auch geht.

    Grüße
    Mario

  8. #8
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    73
    Beiträge
    11.077
    Hallo *Mario*!

    Das geht sicher nicht.

    Der Hauptunterschied zwischen den Famillien 12+16F und 18F liegt in der Organisation des Programmspeichers.

    Bei den 12F und 16F PICs ist der Programmspeicher 14 Bit breit und jede Adresse enthält einen vollständigen (gültigen) Befehl.

    Bei den 18F PICs ist der Programmspeicher 8 Bit breit und nur jede gerade Adresse enthält einen gültigen Befehl, da jeder 16-Bit Befehl im Speicher 2 Byte lang ist.

    Deswegen "goto $+1" schickt den Prozessor vom 18F in die Mitte des nächsten Befehls, was er nicht interpretieren kann, und das Programm hängt.

    Das ist, so wie ich es jetzt sehe, auch eine Falle für Umsteiger von 12F und 16F auf 18F PICs.

    MfG

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    27.01.2006
    Beiträge
    44
    Hallo PICture,

    danke für die Erklärung, wusste ich nicht! Da ich demnächst mein Programm auf einen PIC18 portieren werde (wegen USB) wäre ich da sicher reingefallen.

    Super Tipp, Dank Dir!

    Gruß
    Mario

  10. #10
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    73
    Beiträge
    11.077
    Hallo!

    Im Microchip Forum haben ein Problem mit dem PIC16F630 gehabt. Sie wollten RA0 bis RA2 als digital I/O eintellen. Ich habe das Problem auch mal gehabt und herausgefunden, dass es bei der Initialisiereung von PORTA, anstatt fehlerhaft im Datenblatt angegebenem:

    movlw 5
    movwf CMCON

    stehen muss

    movlw 7
    movwf CMCON

    Seit ich mein Beitrag dort gepostet habe, hat sich keiner mehr gemeldet.

    MfG

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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

Labornetzteil AliExpress