Antworten

Einschränkungen: 8 pro Beitrag (8 verbleibend), maximale Gesamtgröße 8,79 MB, maximale Individualgröße 1 MB
Entfernen Sie den Haken der Dateianhänge, die gelöscht werden sollen
Klicken Sie hier oder ziehen Sie Dateien hierher, um sie anzuhängen.
Anhänge und andere Optionen
Verifizierung:
Bitte lassen Sie dieses Feld leer:
Geben Sie die Buchstaben aus dem Bild ein
Buchstaben anhören / Neues Bild laden

Geben Sie die Buchstaben aus dem Bild ein:

Tastenkürzel: Alt+S Beitrag schreiben oder Alt+P für Vorschau

Zusammenfassung

Autor picass
 - Heute um 19:14:20 CET
Zitat von: vloki date=1763390927Ansonsten könnte Lesson 3 so aussehen:

So sieht es in der hatten Realität aus: Sie rotieren, die 4 LEDs ! Nicht wirklich, aber ihr Leuchten !

Der Debugger hat nix zu meckern und morgen mache ich mich dran, zu verstehen, warum das klappt! Heute steckte ich noch mit beiden Armen tief und lange im Rollladenkasten, aber wenn morgen der voll krasse Durchblick erreicht werden sollte, dann......, dann passiert leider nix: sitze z.Z. auf dem Trockenen, nix mit "auf den Erfolg machen wir erst mal einen und einen zweiten und den dritten sowieso usw.  .......drauf".
Grüße, picass
rotieren.jpg
rotieren.jpg

Autor Ottmar
 - Heute um 12:24:02 CET
Grrr... Falscher Finger!

...und entsprechend gibt es daselbe für shift left:
RLCF
RLNCF
Autor Ottmar
 - Heute um 12:09:16 CET
Zitat Vloki: 
[Das shift left gibt es bei den PIC18 nicht. Kommt wohl von den neuen PIC16]
Doch: 
RRCF rotate left through CARRY
RRNCF rotate left no carry
Mit CARRY ist 'STATUS,C' gemeint.
Autor pic18
 - Gestern um 20:20:33 CET
muss movwf,LATC,A heißen, ich habe es nochmal zusammengeschrieben:
init0:
clrf    TRISC,A         ;make all of PORTC an output
init1:
movlw 0x08;
movwf LATC,A; setzt Bit 3 und löscht alle anderen Bits
Mainloop:
OndelayLoop:
    decfsz  Delay1,f,A      ;Waste time.
    goto    OndelayLoop     ;The Inner loop takes 3 instructions per loop * 256 loopss = 768 instructions
    decfsz  Delay2,f,A      ;The outer loop takes an additional 3 instructions per lap * 256 loops
    goto    OndelayLoop     ;(768+3) * 256 = 197376 instructions / 250K instructions per second = 0.79 sec.
Rotate:
    bcf     STATUS,0,A        ;clear the carry
    rrcf    LATC,F,A        ;shift the LEDs and turn on the next LED to the right
    bnc     MainLoop      ;
    bra     init1        ;repeat this program forever
Autor pic18
 - Gestern um 19:41:30 CET
Vielleicht sehe ich das Problem falsch. Ich würde es so programmieren. Wobei hier LATC,7 immer durch die Rotation gelöscht wird. Besser wäre auch anstatt:
bsf     LATC,3,A

movlw 0x08;
movwf LATC,F,A; setzt Bit 3 und löscht alle anderen Bits

Rotate:
    bcf        STATUS,0,A        ;clear the carry
    rrcf    LATC,F,A        ;shift the LEDs and turn on the next LED to the right
    bnc   MainLoop      ;
    bsf     LATC,3,A        ;yes, it did and now start the sequence over again by turning on DS4
    bra    MainLoop        ;repeat this program forever

Zitat von: vloki in Gestern um 15:48:47 CETDas shift left gibt es bei den PIC18 nicht
RLCF f, d, a Rotate Left f through Carry
Autor vloki
 - Gestern um 15:48:47 CET
Zitat von: picass in Gestern um 09:55:05 CETAuch das Shift-Left und die Prüfung des geschobenen Carry-Bits wird angemeckert: wäre keine korrekte Syntax.
Für das Carry finde ich irgendwie auch keinen gültigen Namen. Muss man evtl. selber definieren.
Das shift left gibt es bei den PIC18 nicht. Kommt wohl von den neuen PIC16.

Ansonsten könnte Lesson 3 so aussehen:
; PICkit 3 Starter Kit
; Assembly Lesson 3
;
; VSK @THU 17.11.2025
; MPLABX v6.20 / pic-as v3.10
; Board: PICkit 3 Low Pin Count Demo Board
; *******************************************************************
; * See Low Pin Count Demo Board User's Guide for Lesson Information*
; *******************************************************************

; config statements in Config_18F1xQ41.s
; cpu clock speed is set to 1MHz in the configuration bits
    
#include <xc.inc>

GLOBAL Delay1,Delay2;make them global -> watchable when debugging

PSECT udata_acs     ;shared memory location that is accessible from all banks
Delay1:
    DS      1       ;reserve 1 byte for Delay1
Delay2:
    DS      1       ;reserve 1 byte for Delay2

    ; -------------------LATC-----------------
    ; Bit#:  -7---6---5---4---3---2---1---0---
    ; LED:   ---------------|DS4|DS3|DS2|DS1|-
    ; ----------------------------------------

PSECT resetVec,class=CODE,reloc=2   ; define "-presetVec=0h" in custom linker options
resetVec:
;cpu clock speed is set to 1MHz in the configuration bits
    clrf    TRISC,A         ;make all of PORTC an output
    movlw   00001000B       ;start the rotation by setting DS4 ON
    movwf   LATC,A          ;write contents of the working register to the latch
MainLoop:
OndelayLoop:
    decfsz  Delay1,f,A      ;Waste time.
    goto    OndelayLoop     ;The Inner loop takes 3 instructions per loop * 256 loopss = 768 instructions
    decfsz  Delay2,f,A      ;The outer loop takes an additional 3 instructions per lap * 256 loops
    goto    OndelayLoop     ;(768+3) * 256 = 197376 instructions / 250K instructions per second = 0.79 sec.

Rotate:
    rrcf    LATC,F,A        ;shift the LEDs and turn on the next LED to the right
    btfss   STATUS,0,A      ;did the bit rotate into the carry (i.e. was DS1 just lit?)
    goto    MainLoop	    ;nope, repeat this program forever
    bsf     LATC,3,A        ;yes, it did and now start the sequence over again by turning on DS4
    bcf	    STATUS,0,A	    ;clear the carry
    goto    MainLoop        ;repeat this program forever

    END     resetVec
  CONFIG  RSTOSC = HFINTOSC_1MHZ; Reset Oscillator Selection (HFINTOSC with HFFRQ = 4 MHz and CDIV = 4:1)
Autor vloki
 - Gestern um 10:44:50 CET
Zitat von: picass in Gestern um 09:55:05 CETÜbers Wochenende lief leider nicht viel, was u.a. daran lag, dass ab der Lesson3 nichts mehr ging.
Jo, wie erwähnt war ich nie über Lesson 2 hinaus gekommen ;-)
Autor picass
 - Gestern um 09:55:05 CET
Übers Wochenende lief leider nicht viel, was u.a. daran lag, dass ab der Lesson3 nichts mehr ging. Die Lesson2 hatte ich allerdings nach Raus-Löschen der zwischenzeitlichen Änderungen wieder zu einwandfreier Funktion gebracht. Allerdings lief die CPU nach dem Außerkraftsetzen der angemeckerten Oszillator-Einstellungen wohl mit 4 MHz: das Blinken erfolgt mit geschätzt 4 bis 5 mal pro Sek..
Bei L3 wird alles angemeckert: jedwede Speicher-Zuweisung, Variable,..... Da ist nun Grundlagenarbeit erforderlich und die wird aktuell auch ausgebremst, weil heute morgen sich einer der Rollladenpanzer in unserem Haus beim Hochziehen mit Knall verabschiedet hat. Sobald wieder Zeit ist, muss unbedingt versucht werden zu klären, wie man die Zuweisung des Programms in den Speicherraum hinbekommt. Nachdem die ORG 0x00h nicht mehr funktionieren soll, ist das im Nebel. Auch das Shift-Left und die Prüfung des geschobenen Carry-Bits wird angemeckert: wäre keine korrekte Syntax.
Grüße, picass
Autor vloki
 - 15.11.2025, 14:48:53 CET
Da kann ich Montag ja gleich mal schauen, wenn ich meine Q20, Q40 und Q41 PICs bekomme ;-)

(PS die Ordner build, debug und dist kannst du dir sparen - spart viiiiieeeeel Speicherplatz)
Autor picass
 - 15.11.2025, 12:10:17 CET
Die Debatte über Motive wollte ich - zunächst - auslassen, weil das einen ganz eigenen und wohl auch ausführlichen neuen Fred füllen würde. Deshalb nur in Stichworten meine neue Motivation:
- ADC mit 12bit gibts nur bei den neueren PICs, die allesamt nur unter PIC-Assembler (PAss) laufen (oder halt C).
- für den PICKit5-Programmer hatte ich 130 € ausgegeben, die wären für die Katz, wenn nicht.....
- teils unwissend über das Erfordernisse des PAss und teils in freudigem Vorgriff hatte ich PIC-Q-Typen gekauft, die bislang unnutzbar rum lagen.
- mein zwischenzeitlicher Anlauf auf MicroPhyton wurde ernüchternd: zu wenig Unterstützung zur seriösen Einarbeitung
- wenn man diverse Dokumente oder aber auch persönliche Statements von anderen Strategen liest, kann man zum Eindruck gelangen, dass die eigentlichen Assembler-Befehle weitestgehend gleich sind - mithin das eigentliche Prog nur wenig Änderungen braucht, und "nur" die Preliminarien - also die Config und die Platzierung im Speicher einer Anpassung bedürfen.
- wäre dem so wie gerade dargestellt, dann würde sich der Aufwand lohnen, denn die allermeisten meiner Programme sind eher kurze Progs für Steuerzwecke.
- habe vor Kurzem von einer Studie gelesen, dass das Erlernen neuer Sprachen das Altern des Menschen deutlich raus zögern kann, auch u.a. in Hinblick auf Demenz. Es waren zwar die Umgangssprachen der Menschen gemeint, aber die Aussage wird schon auch übertragbar sein auf "unsere" Programmiersprachen.
- es wurmt mich, bislang schon viel Zeit für Versuche zu einer anderen Prog-Sprache aufgebracht zu haben, ohne dass dies zu echten Anwendungen in einem Prog geführt hatte. Da möchte ich nicht wirklich einfach den Löffel hin werfen, sondern schon gerne mal ein Ziel auch erreichen.

Gettz zu Grundsätzlichem und da wende ich mich aus aktuellen Gründen auch an vloki, der sich vor einem Jahr helfenderweise schon der Mühe unterzogen hatte, einen Einstieg in den neuen Assembler unter Verwendung des PIC18F14K22 und anhand der bekannten Lessons anzubieten.
Meiner Erinnerung nach war ich der Unruhegeist, welcher vor Etlichem in Richtung PAss geschaut hatte und dabei "meinen" PIC18F14K22 zur Einarbeitung nutzen wollte. Aktuell sehe ich das anders, auch unter dem Eindruck, dass - wie oben beschrieben - ein User gleich 21 angeblich funktionsfähige solche Progs für "seinen" PIC10Fxxx geschrieben hatte.
Heuer frage ich mich, was so' Unsinn soll? Wozu der irre Aufwand mit Einarbeitung in einen neuen Assembler und den dann auf alte Hardware verfrachten?! Die alte HW läuft mit dem zu ihr passenden Assembler auch, ganz ohne den Aufwand. Wenn....., dann macht das Gewusel nur Sinn, indem man auch die neue Hardware nutzt. Das ist so ein wenig auch wie bei Windows-Versionen: auch die sollten zur Hardware des PC passen, ein Mischen über Generationen/Entwicklungsstufen hinweg bringt unnötigen Trouble.

Also habe ich heute den PIC18F14K22 für weitere PAss-Bemühungen ausrangiert und mein Testboard mit dem PIF18F14Q41 angeworfen. Und Tusch: die Lesson1 mit "hallo world" funktionierte ohne jedwede Änderung. Is klar: die Lesson2 mit Blinken dann nicht mehr. Angemeckert wurde u.a. die Initialisierung für die Frequenzeinstellung via "OSCCON". Das geht im PAss anders, auch der Name ist neu. Da hab' ich mal einen frechen Kurz-Queck ausgeführt - also einfach mal was gemacht - und dann die restliche Fehleranzeige über nicht passenden Speicherplatz ignoriert und Tusch2: da blinkte und leuchte Alles, was sollte,......wenn auch nicht exakt wie erwartet. Das Blinken klappt, allerdings gibt es ein kurze und eine längere Pause im Wechsel und selbst die Dauer-LED hat eine kurze Leuchtpause. Is klar, es fehlt quasi die komplette Initialisierung. Die ist leider ganz anders und scheint auch kompliziert zu sein.

Aber immerhinque habe ich einen kleinen Zeh in den Tür-Spalt gebracht. Mal sehen, wie es weiter geht. Das von vloki vorgelegte Prog "lesson2" habe ich abgeändert. Den kompletten Ordner mit dem .s - File habe ich unten angehängt.
Grüße, picass
lesson2q41.X.7z
🡱 🡳