- Labornetzteil AliExpress         
Ergebnis 1 bis 6 von 6

Thema: Anfänger bittetum Tips zur Selbsthilfe bei Problem mit 16F876A

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer
    Registriert seit
    20.09.2017
    Ort
    Plauen
    Beiträge
    3

    Anfänger bittetum Tips zur Selbsthilfe bei Problem mit 16F876A

    Hallo zusammen
    Bin neu hier im Forum und bitte daher um Nachsicht bei etwaigen Fehlern!

    Kurz zu mir: Ich heiße Thomas bin 50 Jahre alt und versuche seit einiger Zeit mich mit der Programmierung von PIC´s. Als Hilfeseite habe ich bisher die Seite von "sprut" genutzt von der ich auch viel gelernt habe! Ach habe ich Teile aus Seinen Projekten bei mir genutzt, vor allem wenn ich mit meinen eigenen nicht weiter kam.
    Nun zu meinen Problem-Projekt: Ich möchte einen Fahrregler für die Modellbahn konstruieren, der digital angesteuert wird und ein PWM Signal ausgibt. Wenn das geht soll er später weiter modifiziert werden aber halt erst wenn das mit der PWM funktioniert. Die PWM wird über einen Zähler (Fahrstufenzähler) welcher über Tasten hoch und runter gezählt wird modifiziert (Wert für Duty cycle). Der Wert der Fahrstufe (0 bis 31) wird in BCD Zahlen umgewandelt und über 2 Schieberegister (4094) an 2 7-Segmentdisplays ausgegeben (Zehner und Einer). Als Grundprojekt habe ich dazu ein PWM Regler, der über einen Poti gesteuert wurde, genommen, daher die Fragmente für den ADC. Ohne PWM funktioniert ganze so wie ich es mir gedacht habe.
    Nun zu meine Problem: Wenn jetzt die Konfigvariablen für die PWM freischalte (Semikolon weg) fängt das Programm an zu "spinnen". Das äußert sich dahin, das beim hochzählen der Zähler bei bestimmtem Einer Werten wieder genullt wird. Beim runterzählen nullt sich der Zähler beim Wechsel von 0 zu 9. Mit den Tasten +/- 5 kann ich über diese Werte drüber springen. Und es passiert nur bei den Einer Werten. als 2. Phänomen hatte ich, das der Zähler nur bis zu einen bestimmten Wert zählte z.B. 27 und sich dann nullte. Der PIXC hängt sich aber anscheinend nicht auf, da auf Tastendruck weiter zählt aber hat nur bis zum "Problemwert".
    ich wäre sehr dankbar wenn mir hier jemand weiterhelfen könnte, da ich derzeit nicht mehr weiterweis wo das Problem liegt. Es ist bestimmt ein Programmierfehler von mir aber ich finde ihn nicht.

    ich habe im Anhang mal die gerade noch funktionierende asm uns lst Dateien angehängt. Wenn ich in dieser asm Datei jetzt ein Semikolon für die PWM weg nehme (freigeben der Konfigvariable) funktioniert das ganze nicht mehr (jedenfalls bei mir)
    Als Pich verwende ich einen 16F876A, als Taktquelle einen 4MHz Resonator, aufgebaut ist das ganze auf einem Steckbrett. Zum programmieren verwende ich ein "PICKit 3" und als Software "MPLAB IPE v3.55" und zum Übersetzen "MPASMWIN".

    Vielen Dank im voraus für eure Hilfe. Sollten noch Fragen oder Infos fehlen, dann bitte melden.

    PS: ich hoffe das mit den Anhänge war richtig. Da der Code recht lang ist wollte ich nicht hier direkt einstellen. Bei Fehlern hier im Forum bitte darauf hinweisen.

    Gruß Thomas
    Angehängte Dateien Angehängte Dateien

  2. #2
    Erfahrener Benutzer Roboter-Spezialist Avatar von witkatz
    Registriert seit
    24.05.2006
    Ort
    NRW
    Alter
    54
    Beiträge
    542
    Blog-Einträge
    17
    Hallo Thomas,
    willkommen im RN und danke für die interessante Frage

    Du hast das Listing der funktionierenden Version geposted. Wenn du dir die Adressen anschaust, müsste eigentlich klar sein was passiert. Die Sprungtabellen enden gerade zufällig auf Adresse 0x0FF. Das ganze Programm inklusive der Sprungtabellen passt zufällig gerade eben in einen 256 Byte Block.

    Sobald du Code hinzufügst, z.B. den PWM Teil, verschiebt sich die Tabelle im Programmspeicher und liegt teilweise in den nächsten 256 Byte Block. Mit dem 8-Bit Befehl addwf PCL, f landest du ab einem bestimmten Wert nicht mehr in der Tabelle, sondern irgendwo im Programm ab Adresse 0. Der PCL läuft einfach über und der PCLATH ist immer noch 0.
    Lese dir vielleicht zum besseren Verständnis das Kapitel Tabellen im RN-Wissen Artikel PIC Assembler.
    Auch bei Sprut gibt es eine sehr gute Erklärung zu Sprungberechnung mit PCL.

    Als Abhilfe könntest du die Tabellen auf eine höhere Adresse legen, so dass sie komplett in einem eigenen 256 Byte Block liegen. Das PCLATH muss vor dem Aufruf der Tabellen-Routinen mit dem höherwertigen Teil der Adresse vorbelegt werden, damit bei der PCL-Berechnung das PCH mit dem richtigen höherwertigen Teil der Adresse geladen wird.
    Vielleicht in etwa so:
    Code:
        
        movlw    HIGH Ziffer
        movwf    PCLATH
        movfw    Zehner        ; Wert für Zehner
        call     Ziffer        ; 7-Segmentwert
    
    ...
    
        ORG 0x0200
    ; 7-Segment-Tabelle
    Ziffer
        addwf     PCL, f
        retlw    B'01111110'    ; Ziffer 0
    
    ...
    Gruß
    witkatz
    Geändert von witkatz (20.09.2017 um 22:33 Uhr)

  3. #3
    Neuer Benutzer
    Registriert seit
    20.09.2017
    Ort
    Plauen
    Beiträge
    3
    Hallo witkatz

    Vielen Dank für deine Antwort. Hatte mir schon fast gedacht das es an den Tabellen liegt, da sprut ja auch sowas geschrieben hat. Habe leider nicht verstanden wie diese Zuweisung mit org machen muss. Auch den Beitrag habe ich gelesen.
    Dabei stellt sich jetzt nur eine Frage, wird "HIGH Ziffer" automatisch generiert oder muss ich da eine Variable bilden und Ihr einen Wert zuweisen.
    Ich werde ganze mal versuchen und sehen was der Compiler sagt (ob er das ganze übersetzt).

    Nochmals vielen herzlichen Dank für deine Hilfe. Wenn Interesse besteht kann ich das ganze Projekt nach Vollendung hier ins Forum stellen. Auch wenn es nicht gerade für Robis gedacht ist )

    Gruß Thomas

  4. #4
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    74
    Beiträge
    1.175
    Blog-Einträge
    1
    Hallo,
    ich habe mal interessehalber (Fahrregler) mitgelesen. Muss feststellen das die Assemblerkenntnisse schon bei mir im Keller gerutscht sind...nun ja 96 habe ich den letzte ASSR - Code "gekloppt" für den 8085...davor nur für den Brotkasten.
    Muss sagen das es aber immer wieder interessant ist mal wieder mit ASSR was zu machen.

    Thomas ich wünsche Dir viel Erfolg dabei, weil's für die Modellbahn ist ganz besonders !!

    Gerhard
    Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint

  5. #5
    Neuer Benutzer
    Registriert seit
    20.09.2017
    Ort
    Plauen
    Beiträge
    3
    Hallo witkaz

    nochmals vielen Dank für Deine Hilfe. Der Compiler Versteht "HIGH Ziffer" und das Programm macht was es soll. Habe aber noch eine Frage zu den Adressen, denn hier verwirrt mich das Datenblatt des 16F8XXA. Auf Seite 13 meiner Version steht als Endadresse
    eine 1FFFh und auf Seite 15 bei der Bankbeschreibung eine 1FFh. Da die 200h über 1FF liegt, denke ich mal das die 1FFFh die richtige Endadresse ist oder habe ich hier einen Denkfehler?
    Mittlerweile hat das ganze noch einen Not-Halt und Fahrtrichtungstaster erhalten. Da das ganze später einmal von "außen" gesteuert werden soll werde ich mich vermutlich noch mal melden, da ich bei Schnittstellen noch ein paar Verständnisprobleme habe. Mal sehen ob ich`s durch testen auch heraus finden, denn aus Fehlern lernt man das meiste

    Also nochmals recht herzlichen Dank und ein schönes WE

    Gruß Thomas

  6. #6
    Erfahrener Benutzer Roboter-Spezialist Avatar von witkatz
    Registriert seit
    24.05.2006
    Ort
    NRW
    Alter
    54
    Beiträge
    542
    Blog-Einträge
    17
    Es sind zwei getrennte Speicher, PIC hat Harvard-Architektur
    Zitat Zitat von Thommy07 Beitrag anzeigen
    Auf Seite 13 meiner Version steht als Endadresse eine 1FFFh
    Program Memory, wird mit dem Program Counter Adressiert
    Zitat Zitat von Thommy07 Beitrag anzeigen
    und auf Seite 15 bei der Bankbeschreibung eine 1FFh.
    Data Memory also Register

Ähnliche Themen

  1. [ERLEDIGT] I2C auf 16F876A klappt nicht
    Von RoboHolIC im Forum PIC Controller
    Antworten: 29
    Letzter Beitrag: 01.11.2015, 09:10
  2. Anfänger sucht Tips für Hardware
    Von Hans` im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 7
    Letzter Beitrag: 08.03.2009, 21:31
  3. Anfänger sucht Tips für den Einstieg
    Von Schorfo im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 3
    Letzter Beitrag: 20.02.2009, 11:43
  4. suche 16F876A.inc Datei
    Von HoStAn im Forum PIC Controller
    Antworten: 2
    Letzter Beitrag: 06.09.2006, 11:39
  5. Unlösbares Problem mit PULSEIN ?? Tips gesucht!! Hilfe
    Von m@rkus33 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 28
    Letzter Beitrag: 06.06.2006, 22:30

Berechtigungen

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

LiFePO4 Speicher Test