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

Thema: Timer1 als Gesamtlaufzeit-Zähler möglich?

  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    09.05.2006
    Beiträge
    1.178

    Timer1 als Gesamtlaufzeit-Zähler möglich?

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Mahlzeit!
    Kurze Frage. Bei den Pic16Fxxx gibt es ja den Timer0 (0..255+1) und den Timer1 (65535 +1).
    Kann ich den Timer 1 somit als Laufzeitspeicher verwenden?

    Ich benötige für eine Stoppuhr mit 10mS Schritten eine Zeit die "im Hintergrund" immer weiterläuft,
    Bei einem Stoppsignal soll der aktuelle Zeitwert seit "Start" auf dem LCD dargestellt werden.
    Beim nächten Stoppsignal wieder die GESAMTzeit seit dem "Start" (nicht die Zeit seit dem letzten Stopp).

    Daher die Frage ob ich den Timer1 als Gesamt-Laufzeit-Zähler nutzen kann.
    Die benötigte GesamtMess-Zeit liegt dabei unter 1h, eigentlich sogar unter 100 Sekunden,
    ich brauche aber eine Auflösung von 10mS Schritten, also 00,01 Sekunden.

    Ob der Timer1 dann ab "Startsignal" läuft oder ab "Reset" ist ja egal, da eh nach Ende jeder Messung einmal Reset erfolgt.

    Danke!

    (PS.: Bin auf diese Idee gekommen weil ich beim Arduione gelesen habe, das dieser einen Laufzeit-seit-Start Timer hat.
    Da dieser immer im Hintergrund mitläuft und wohl bis zu 30 Tage messen kann, kann man über diesen den Start/Ersten
    und Stop/zweiten Wert vergleichen und damit die Differenz = vergangene Zeit ermitteln)
    GrußundTschüß \/
    ~Jürgen

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.677
    Hallo Jürgen

    ... Bei den Pic16Fxxx gibt es ... und den Timer1 (65535 +1). Kann ich den Timer 1 somit als Laufzeitspeicher verwenden ...
    Ohne dass ich jemals mit nem Pic Erfahrungen machte, behaupte ich : ja. Bei meinem Atmels habe ich praktisch immer einen interruptgetriebenen Heartbeat (im Prinzip egal welcher Timer), der mit 20kHz eine kurze ISR aufruft. Darin wird eine 16bittige Variable von 19 999 runtergezählt - dann wieder von oben anfangen. Beim Nulldurchgang wird eine weitere 16bittige Variable "Isecundn" hochgezählt. Als unsigned Variable (eine Laufzeit kann nie negativ werden) komme ich also auf über 18 Stunden Laufdauer bis zum Überlauf. WENN Dir das nicht reicht, dann kannst Du natürlich nen Stundencounter (if (Isecundn == 3600)...) einbauen und wochenlang die Zeit messen.
    Ciao sagt der JoeamBerg

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    03.09.2009
    Ort
    Berlin (Mariendorf)
    Beiträge
    1.023
    @Jürgen
    Wenn die Stoppuhrfunktion die Kernaufgabe des Controllers ist, kannst du den Timer 1 als Speicher dafür verwenden. Die Zeitbasis von 10ms schreit aber eigentlich danach, das von oberallgeier beschriebene Verfahren anzuwenden; andernfalls ist man doch sehr beschränkt in der HW-seitigen Konfigurierbarkeit (Prescaler-Einstellungen) des Zähltaktes und der Zeit bis zum Überlauf von Timer1. In Software kaskadiert man zwei, drei, vier, ... Bytes und gut is. Die Ausführungszeit dafür ist bei einem 10ms-Interrupt nicht der Rede wert.
    Geändert von RoboHolIC (30.05.2013 um 23:35 Uhr) Grund: Adressat

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    09.05.2006
    Beiträge
    1.178
    Nachdem ich jetzt nach einem Tag rumgefluche meinen Programmierer wieder hinbekommen habe,
    werde ich jetzt endlich meine Platine zusammenbraten.

    Also LCD ran, 3 Taster (Start, Stop, Reset), 4096mhz Quarz, und mal ein fertiges Programm von Sprut draufbrennen.

    Dann stimmt zwar der Timer/Zähler überhaupt nicht, aber wenn das dann irgendwas tut,
    werde ich nach und nach versuchen das von 1Sekunden auf 10mS Schritte passend zu modden..
    und wenn das ging dann das
    Reset; Start=>LCD Uhr läuft mit , Stop=>Zeit1 auf LCD steht , Stop=Zeit2 auf LCD , Stop=Zeit3 auf LCD steht.
    irgendwie hinbiegen. ... ... ...Hoffentlich!

    Im Sprut Beispiel wird der Timer 0 verwendet, der nach 255+1 überläuft, um den Zeitgeber mit 32khz quarz in Sekundenschritten zu machen/weiterzuzählen.*
    Ich dachte an eine Kombination aus Timer 1 mit Vorteiler:4 und Timer 0 als Überlauf-Mitzähler. Wären dann 65535 x4(Teiler) x 255 Werte die im Hintergrund mitlaufen können.

    Haarig wirds dann für mich mehrere Zeiten zu speichern/auszugeben.


    *@RoboHolic: Ich denke das ist das was du mit kaskadieren meinst. Sprut zählt die EinerSekunden bis 9, bei 10 erfolgt der reset und der übertrag um 1 auf das nächste bit (ZehnerSekunden),
    und dort dann bei 5+1 der übertrag von 60sekunden = 1 Minute .. dann 60min = 1h .. bis 23:59+1 => 00:00:00

    Ich habe nur Sorge, dass ich nachher fürs LCD ausgeben/beschreiben und den Rest drumrum nicht genug Zeit habe um die 10mS genau genug zu halten/messen.
    Wenn ich das im timer 1 "laufenlassen" könnte und nur kurz den wert auslese und damit von mS auf [ss]:[mS][mS] rechnen kann reicht mir das.
    Brauche gar keine Minuten, es würde auch 999Sekunden,[mS][mS] reichen, was ja bei einem 10mS Grundzähler

    Eine einfache Division oder sogar eine direkte darstellung möglich macht...
    30.025 in Timer 0 wären dann 30.025x10mS = 300.250mS also 300,250 Sekunden.
    Darstellbar aufm LCD als 300[Sek]:250[mSek].

    (wobei die letzte 1mS Stelle egal ist.)

    .. Genug geredet, los gehts an den Lötkolben!
    GrußundTschüß \/
    ~Jürgen

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    03.09.2009
    Ort
    Berlin (Mariendorf)
    Beiträge
    1.023
    Ein 4096MHz-Quarz ist schon mal sehr komfortabel, weil damit das Timer-Preload-Verfahren zur Einstellung der Zykluszeit wegfällt (siehe die Errata sheets zum Timer0-Fehler).
    Willst du ebenfalls diesen 32.768kHz-Quarz verwenden? Der Sinn des vor Dir erwähnten Sprut'schen Konstrukts ist mir nicht klar.
    Willst du Timer 0 selbst inkrementieren, wenn Timer 1 überläuft? Das macht nicht viel Sinn und der Chip gibt dergleichen auch nicht her. Dazu verwendet man sinnvollerweise die in ausreichender Zahl vorhandenen Speicherbytes des SRAM.
    Die Idee, gleich alle Ziffern für die Anzeige passend durch einzelne Zähler(überläufe) zu implementieren ist recht gut; benötigt zwar in der ISR etwas mehr Zeit, spart dafür aber die aufwendige nachträgliche Zerlegung. Das ist das eine. Das andere ist die Differenzbildung in der ziffernorientierten Darstellung, das klingt für mich ohne Hardwareunterstützung für BCD-Arithmetik etwas heikel.

    Das mit dem Kaskadieren hatte ich allerdings anders gemeint: Nämlich bei jedem Timerinterrupt das inkrementieren des niederwertigsten Bytes und bei auftreten des carry-Flags inkrementieren des nächst-höherwertigen Zählerbytes und bei auftreten des carry ........ Das ist deine binäre Uhr. Die Differenzbildung über mehrere Bytes (ich vermute mal Assembler) kann man sich aus dem Netz holen oder selbst ausdenken. Es gibt auch Application Notes für die PIC16-Familie, da wird so etwas beschrieben. (In C wäre das ja kein Thema).
    Der Vorgang des Zeitnehmens ist schlicht das Anfertigen von Kopien aller Zähler-Bytes.

    Die Ausgabe aufs LCD ist wirklich Aufgabe des Hauptprogramms, allein die Übergabe der Datenhappen an das LC-Modul sollte man entweder der ISR selbst aufbürden oder durch ein von der ISR gesetztes "Neue-Zeitscheibe"-Flag synchronisieren.

    Das alles genau zu beschreiben fällt mir allerdings schwer. Es ist schon wichtig, dass du eine klare Vorstellung von solchen zeitgesteuerten Mechanismen zwischen Hauptprogramm und ISR entwickelst. Da scheint auch jeder seine eigene Vorliebe zu entwickeln, wie er das genau umsetzt.

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    09.05.2006
    Beiträge
    1.178
    Ich habe den 4096er Quarz bestellt weil Sprut in seinen Beispielen explizit sagt,
    dass mit dem 32khz uhrenquarz eine 100mS oder 10mS Uhr nicht möglich ist, da mit seiner vorgehensweise der kleinste passende Teiler eben der 1 Sekunden Schritt ist.
    Habe mich da in die 3 Programmbeispiele die er hat versucht etwas einzulesen:
    Zitat Sprut bei 32khz LCd Uhr:
    Weiterführende Gedanken
    Kann man auf dieser Basis auch eine Stoppuhr mit 1/10 und 1/100 Sekunden-Anzeige bauen???
    Nein! es gibt keine Möglichkeit, aus einem 32768-Hz-Takt durch Teilung ein 10Hz oder 100Hz-Signal abzuleiten. Folglich müssen Stoppuhren mit ganz anderen Quarzen bestückt sein.
    Und bei 4.096 : 4 : 256 wäre man bei => 4000 überläufen pro Sekunde .. wenn ich die dann
    durch 4 (Vorteiler) Teile habe ich beim Originalprogramm von Sprut eine um 1000fach höhrere Messzeit, also 1mS statt 1s.

    gegenüber
    32768 : 4 : 256 => 32 Überläufe pro Sekunde .. die teilt Sprut dann durch 32 (Vorteiler) und hat seinen Überlauf im Sekundentakt.


    "Theroetisch", muss ich im Originalprogramm also nur die Pausenzeiten/Loops anpassen um den Faktor 1000x und die LCD Wartezeiten an mein großes LCD anpassen,
    dann läuft die Uhr schon mit mS. Ist aber halt noch keine Stoppuhr.

    --------------
    Sprut speichert die Zahlenwerte direkt in die auszugebenden Zeichen (ES ist ein vorher definiertes Speicher Bit), soweit ich das richtig sehe,
    wobei er dann eben gleich die entsprechenden Überläufe zur nächsten Stelle mit macht, z.B: bei 59+1sek = 1min. ( siehe code bei clrfs ES)
    So sieht das Unterprogramm dafür aus, das für jeden Sekundenüberlauf/Interrupt abgearbeitet wird.

    Code:
    Int_1
        bsf    neu
    
        incf    ES, f        ; 1 Sekunden erhöhen
        movlw    D'10'
        subwf    ES, w
        btfss    STATUS, Z    
        goto    Int_end        ; 1 Sekunden <> 10    
    
        clrf    ES
        incf    ZS, f        ; 10 Sekunden erhöhen
        movlw    D'6'
        subwf    ZS, w
        btfss    STATUS, Z    
        goto    Int_end        ; 10 Sekunden <> 6    
    
        clrf    ZS
        incf    EM, f        ; 1 Minuten erhöhen
        movlw    D'10'
        subwf    EM, w
        btfss    STATUS, Z    
        goto    Int_end        ;  1 Minuten <> 10
    
        clrf    EM
        incf    ZM, f        ; 10 Minuten erhöhen
        movlw    D'6'
        subwf    ZM, w
        btfss    STATUS, Z    
        goto    Int_end        ; 10 Minuten <> 6
    
        clrf    ZM
        incf    EH, f        ; 1 Stunden erhöhen
        movlw    D'10'
        subwf    EH, w
        btfss    STATUS, Z    
        goto    Test24        ; 1 Stunden <> 10
    
        clrf    EH
        incf    ZH, f        ; 10 Stunden erhöhen
        goto    Int_end
    Da Sprut nur eine Uhr und keine Stoppzeiten benötigt, zeigt er diese Stellen [ZM][EM]:[ZS][ES] direkt auf dem LCD an.

    Vom Prinzip her würde es also reichen im Fall von "STOPP" Werte der laufenden Uhr zu kopieren und anzuzeigen.
    Beim 2 zeiligen Display wäre es also möglich in der 1. Zeile immer die laufende Uhr zu zeigen
    und in der 2. Zeile die im Moment vom letzten "Stopp" rauskopierten Werte.
    Ich weiß nur nicht ob das schnell genug geht (unter 10mS) dass ich nicht beim Auslesen von hinten nach vorne
    einen Überlauf ins nächsthöhere Bit verpasse und quasi noch paar mS weiterzähle.

    Daher der Gedanke "nach" dem 255+1 Timer den 65535er Timer1 zu verwenden (zu beschreiben) und in diesem die verstrichene Gesamtzeit zu zählen,
    damit ich nur diesen einzelnen Wert auslesen und anschließend "umrechnen" muss,
    und nicht alle 5 Stellen einzeln kopieren.


    Ich versuche mal meinen Gedanken weiterzuführen/zu erläutern:
    Ich lasse den Timer0 255+1 mit den Teilern 4096/4 :4 laufen.
    Ich habe also 1000 überläufe pro sekunde.

    Das schreib ich in ein Byte, was jeweils nach 9+1 überläuft.
    Ich komme also von 1mS Schritt damit auf 10mS. (Dieser Zwischenwert interssiert mich nicht wirklich beim auslesen,
    da mich der 1mS Stand nicht interessiert. Falls genug Luft bleibt kann ich den ja aber immer noch auslesen)

    Diesen 9+1mS Überlauf zähle ich dannn in Timer1 mit.
    Timer 1 kann dann 65535 x 10mS zählen (=655350mS), also eine Gesamtzeit von 655 Sekunden
    - was über 10 Minuten sind und völlig ausreichend.

    Im Fall von "Stopp" lese ich dann den Wert von Timer1 zu diesem Zeitpunkt aus,
    und kann den gespeicherten Wert dann "ganz in Ruhe" langsam auf dem LCD darstellen,
    was dann auch länger dauern darf, da der Timer ja im Hintergund mit seiner Interruptroutine ungestört weiterläuft.

    Die vermeintlichen Grundlagen dazu hab ich da gelesen:
    http://www.sprut.de/electronic/pic/g...mer.htm#timer0


    Mit ISR, meinst du die "Interrupt gesteuerte Routine", also das zeitkritische Programm was
    das LCD-Anzeige/UmrechenHauptprogramm unterbricht und danach wieder zurückspringt, korrekt ?


    ...
    Nunja. Soviel zu dem wie ich mir das theoretisch überlegt habe. Leider fehlen mir noch die Fachbegriffe und Zuordnungen, wie was wo..

    Aber erstmal muss ich meine Platine zum Laufen bekommen, die zeigt nämlich nur 2 schwarze Balken aufm LCD und tut sonst nichts.
    Ich habe das 10Mhz Programm mit dem 4096er Quarz verwenden wollen zum Testen meiner Platine, das läuft halt dann nur auf 40% Speed.
    => http://www.sprut.de/electronic/pic/p...hr/lcduhr.html

    Leider tut sich nichts. Werde die Schaltung nochmal prüfen, wobei ich einen Fehler beim Compilieren vor dem Brennen vermute, da muss ich mal etwas rumspielen
    und werde dann die Fehlercodes posten wenns unter 10 geworden sind
    Mit dem fertigen *.hex und der passend Konfig (high voltage aktiv) beim Brennen hats leider auch nicht geklappt.
    GrußundTschüß \/
    ~Jürgen

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    09.05.2006
    Beiträge
    1.178
    Alsooooo. Irgendwie ist da der Wurm drin.

    Ich habe jetzt alternativ das simple LCD-Testprogramm von Sprut mal draufgemacht, das läuft original mit 4mhz, die 4096mhz sollten also egal sein.
    Da krieg ich aufs ganze LCD (20x4) nur ne graue Fläche, keine Pixel o.ä. sichtbar.

    Meine 5V Spannung war anscheinend zu schwach gepuffert, da hatte ich nur 4,6V , jetzt vorne und hinten 100µF an den Regler und die 4,95V sind da.
    Den Kontrastpin am LCD habe ich auch son hingedreht mitm Trimmer,
    dass ich gut was sehe, dazu das LCD mit 13mA Strom (5V mit 100Ohm Vorwiderstand bei 3,6V LED Spannung)etwas beleuchtet.

    Nun zum komischen Teil.
    Ich hatte ja zu anfangs schon diese 2 schwarzen Balken.
    Wenn ich HS Oszillator eingestellt hatte kam erstmal nix, jetzt mit XT "Crsytal" kam was.
    Laut Sprut ist bei um 4Mhz aber egal ob XT oder HS. (ausser Strom)

    Jetzt mit XT, "low volt disabled",
    Kommt manchmal nach
    "Spannung weg, Spannung Ran" reset

    Ein blinkender Cursor.. der saut dann einmal nach rechts, dann kommt ein "?" was stehenbleibt.
    Was ich auch schon hatte war ein rasendes "?" über die beiden aktiven Zeilen ...

    MCLR bzw reset pin ist aktiv, ich sehe aber keine Auswirkung am LCD.
    Muss mir irgendwie noch ne blinkende LED an einen freien port setzen, als Programm-läuft-Rückmeldung.

    Kann es sein, dass mein Quarz nicht ins Schwingen kommt?
    Ich hab da die gleichen kerkos dran wie ich für die 10Mhz quarze vor Jahren mitgekauft hatte
    -Kann ich (und wie) die Schaltung mit dem internen Schwinger testen,
    oder raucht dann was ab wenn der externe quarz auch noch dran ist?
    ... Sonst muss ich da halt mit EntLötlitze ran.

    Ich werde jetzt noch versuchen das asm selber zu compilieren,
    da kamen bisher über 83 Fehler daher habe ich das fertige hex genommen und nur die Konfiguration geändert.

    Achja: Ich benutze einen PiC16F628A , der wohl auch tut, im Brenner erkannt wird und auch die Demoprogramme
    von Vellemann astrein macht. Das geschribene Hex habe ich auch nachm schreiben überprüft udn es gab keine Fehler/Abweichungen...

    ToDo/Memo an mich selbst für morgen:
    1. ASM compilieren, ohne Fehlermeldung hinbekommen
    2. ASM modifizieren, die Wartezeiten und loops um 50% verringern, anpassung von 10mhz auf 4mhz,
    und weil ein anderer Display controller drin steckt nach der Abfrage "Display Ready Pin" noch ne 10mS Pause einbauen.
    GrußundTschüß \/
    ~Jürgen

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    03.09.2009
    Ort
    Berlin (Mariendorf)
    Beiträge
    1.023
    Ich sehe, dass du Assembler machst und Sprut zitierst. Arbeitest du mit High Voltage Programming? (Sprut propagiert und begründet das ja deutlich).
    Hast du das LowVoltage Programming Enable Bit in den CONFIGs disabled? Es gibt kein HV-Prog.-Enable, das geht immer. Nur der Pin RB3 kann dann noch stören. Ist der per Widerstand auf GND gezogen? Das kann viel Ärger ersparen.

    Das 16-Bit-Register des Timer1 nützt dir kaum was. Auslesen und Verarbeiten kannst du ihn nur byteweise; die Inkrementierung auf 16-Bit-Ebene in Software??? - das wüsste ich grad nicht, wie das gehen soll.

    ISR steht für "Interrupt Service Routine", ansonsten aber richtig.

    Hast du eine Diagnose-LED am Controller dran? Dann mach dich vielleicht erstmal dran, bezüglich Chipprogrammierung auf festen Boden zu kommen. Danach vielleicht einen 1ms- oder 10ms-Interrupt einrichten. Eine blinkende LED. Eine Delayfunktion in der ISR für das Hauptprogramm. Die Datenübergabe an das Display ...

    Bei Fosz = 4,096MHz bzw. Fcycl = 1MHz und 1ms-Interrupt hast du im Extremfall fast 1000 Befehle für die ISR zur Verfügung. Da passt sooo viel rein: (natürlich würde dann das Hauptprogramm nicht mehr "laufen", nur noch "kriechen", aber das ist ein anderes Thema)
    Taster- bzw. Lichtschranken-Signalentprellung, die Uhrenkaskade, Kopieren der Bytes bei erkanntem Zeitnahme-Trigger, die LCD-Bedienung, und und und... die meisten Sachen sind ja mit wenigen Befehlen abgehandelt.

    Vielleicht magst du ja schon vorher die Fehlercodes zeigen, damit du schneller < 10 kommst?

  9. #9
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    09.05.2006
    Beiträge
    1.178
    Assembler, Sprut, Programmieren:
    Also brennen tu ich den IC in meinem Velleman 8048.
    Da habe ich bei der config auch den haken für low volt rausgenommen.
    und jetzt mal noch mit XT oder HS setting getestet.
    Der Vergleich zwischen Hexfile und im IC hat auch keinen Fehler ergeben,
    das Programmieren vom hex klappt also zumindest.

    Danach heissts rausfummeln und den IC umstecken auf die LCD / Stoppuhr Platine.
    Den RB3 kann ich da aber nicht auf GND legen, da darüber original die LCD ansteuerung erfolgt,
    das Programmieren klappt ja aber auch.
    => Der PIC funktioniert auch, da er mit dem Demo2 auf dem Velleman auch funktioniert. Ist ne demo mit lauflichtern, blinkelicht und wechselblinker, mit tasten zum anwählen.

    ------------------------------------------------------

    Ich vermute grade noch einen Fehler im Quarz/Einschwingen, da ich manchmal ein blinkende cursor und ein "?" bekomme was über den LCD sausst,
    und manchmal nichts ausser schwarzen Balken. Bei 3 mal aus-ein-schalten läuft einmal was übers LCD nach paar sekunden.

    Ich hab mir jetzt nen sockel fürs quarz gebaut, wie fürn ic aber nur 3 pins. Der in der mitte ist offen. Da habe ich testweise abwechselnd einen 10mhz und den 4.096er quarz rein.
    aussen sind noch die kerkos die ich aus der krabbelkiste bei den 10mhz quarzen habe, die tausche ich jetzt gegen welche wo ich sicher weiß, dass die 33pF haben.

    Ich hab jetzt noch nen quarzoszillator mit 16mhz gefunden, mit dem ich das ding zwangsbeatmen könnte.

    Ach genau. Und vor dem Umbau am Quarz habe ich an VDD-VSS auf der Unterseite nen 100nF Folienkondensator rangemacht.
    Den hat sprut in der schaltung vergessen / vergessen zu erwähnen, jetzt kommt immerhin manchmal das fragezeichen.

    Am Spannungsregler sind nun davor/dahinter jeweils [100µF]+[470nF], am IC direkt nochmal 100nF.

    Ich tausche jetzt die quarzkondensatoren und löte das nochmal neu und exakt symmetrisch.

    - - - Aktualisiert - - -

    Also ich habe jetzt die 33pF Kondensatoren dran die ich mal mit nem 16mhz quarz bestellt hatte.
    Sprut hat im Beispiel 30pF.
    Mit dem 10Mhz quarz kein wirkliches Ergebnis ausser schwarze Balken,
    mit dem 4.096er bekomme ich am LCD das hier: (von links oben, erste reihe, dann 2. reihe, rasende fragezeichen,
    dann schwarze balken. Keine Reaktion auf MCLR pin nach GND. Schaltung wie bei Sprutbeispiel.

    Bild hier  

    - - - Aktualisiert - - -

    Soo. Also das Assemblerdingens lief jetzt fehlerfrei durch. die 80+ Fehler waren darin begründet, dass die p16f628a.inc nicht in selben ordner lag.
    Damit hat der assembler jetzt ohne fehlermeldung das *.asm von sprut in ein hex gemacht.

    im *.asm habe ich davor entsprechend den p=16f628a und inc=16f628a korrigiert.

    Kein Fehler beim compilieren, kein Fehler beim Brennen, und Vergleich code mit Chipcode ergab auch keinen Fehler.
    also wieder rüber gesteckt, und immer noch nichts. bzw immernoch das ? und cursorblinken wenn ich paarmal resette mit ein/aus.

    Ich hab mir jetzt mal die LCD init von sprut angeschaut, und im datenblatt von meinem gekuckt.
    dabei ist mir beim init eine Abweichung aufgefallen.
    der aufbau ist doch (sprut code)
    ganz rechts RB0
    ganz links RB7

    sprut initialisiert den 4-bit mit
    movlw B'00101000' ; 5 function set, 4-bit 2-zeilig, 5x7
    Er macht also RB3 und RB5 high... wenn ich das im datenblatt bei mir richtig sehe, müsste das aber für meins
    00001000 sein, oder ? (Datenblatt siehe Bild)
    was mich verwirrt ist dass da zwei zeilen stehen, also
    darunter nochmal
    10000000
    kommen müsste, oder ist das egal?
    - Bei function set stehen 2 Zeilen, aber nur eine Auswirkung..

    (Ich hab mal noch die anderen teile rot / grün markiert die wohl passen.)

    Beim Display off schreibt Sprut
    00001000
    aber bei meinem müsste das wohl
    00000000 sein, und für on
    11110000
    oder ?

    (RB7 = D7 ; RB6 = D6; RB5 = D5; RB4 = D4; RB3 = R/W; RB2 = RS; RB1 = MCRL-Taster; RB0= Enable LCD )

    Edit: Cursor home stimmt entgegen bild / grünem haken wohl auch nicht.

    Bild hier  
    Geändert von PsiQ (02.06.2013 um 19:30 Uhr)
    GrußundTschüß \/
    ~Jürgen

  10. #10
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    09.05.2006
    Beiträge
    1.178
    So. Also. Etwas funktioniert, endlich!
    Und zwar:
    -Das Sprut LCD Miniprogramm was Hallo sagt
    -Die Sprut 10Mhz LCD Uhr, aber halt arschlahm weil 4MHZ Quarz.

    Und wo läufts:
    - Auf dem Velleman 8048!

    Mir hat das rumgesuche an meiner Schaltung gereicht. Also habe ich ein 16x2 LCD was ich an einer anderen Schaltung hatte
    (wo ich nur hardware gebaut habe, keine Software gemacht, also keine ahnung vom IC-Inhalt) abgemacht und an das velleman 8048 ran.
    Habe dazu noch zwei Löchlein in die Platine gebohrt um alle RB0 - RB7 Pins anzapfen zu können, da musste ich nämlich noch zwei Leitungen an RB6 und RB7 dazulegen.

    Habe jetzt quasi das Velleman auf das Sprut Standardlayout geändert, Das LCD nach Sprutstandard ran, und das 16x2 (Displaytech 162)
    funktioniert jetzt tatsächlich. Den Reset Button habe ich auch an RB1 ergänzt. Das Beispiel "LCD Uhr 10Mhz" läuft jetzt also schonmal, mit LCD, mit Reset.
    Ich lasse jetzt erstmal das 4Mhz Quarz im Velleman, ob nun 4.096 oder 4.000 ist ja fürs Programm erstmal egal.

    Werde mich jetzt also dran machen, aus dem "32khz Uhr" und dem "10Mhz Uhr" Beispielen eine Uhr für 4.096Mhz mit 10mS Schritten zu machen.

    Velleman verwendet am 4Mhz Quarz 18P Kondensatoren, das ist natrülich weit von den 30pF weg die ich hatte.
    Allerdings sitzt der Quarz auch ziemlich weit weg vom IC, da der für alle 4 Sockel zuständig ist.

    Bildsche: (Der Reset Taster fehlt da noch)
    Bild hier  

    - Mann bin ich froh darüber, ausserdem muss ich so den PIC nicht mehr ständig aus dem Sockel reißen..
    GrußundTschüß \/
    ~Jürgen

Seite 1 von 3 123 LetzteLetzte

Ähnliche Themen

  1. Problem mit Timer1 als Counter im CTC Modus und Interupt
    Von Anam52 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 7
    Letzter Beitrag: 26.02.2013, 16:34
  2. Variablenschar als Schieberegister möglich??
    Von drivepro82 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 05.10.2008, 15:06
  3. Mehr als 7 Defchar. Möglich?
    Von Jon im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 9
    Letzter Beitrag: 01.01.2007, 20:45
  4. Mini-Auftrag: Microcontroller als Zähler mit RS232
    Von frank-findus im Forum Elektronik
    Antworten: 12
    Letzter Beitrag: 07.11.2006, 10:34
  5. Welchen IC als Decoder / Zähler
    Von Lorenz im Forum Elektronik
    Antworten: 5
    Letzter Beitrag: 28.10.2005, 14:21

Berechtigungen

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

Solar Speicher und Akkus Tests