Neueste Beiträge

#11
P
Compiler Software / Aw: Seltsames Programmieren
Letzter Beitrag von picass - 19.10.2024, 14:51:06 CEST
Doch ! >:(  Mache mir doch Sorgen...! So spät in der Nacht und kurz vorm Schlummern sollte "der Tag" nicht nur ruhig ausklingen, sondern zudem nur dem eigenen Wohlbefinden gewidmet sein.

Der Besuch ist beschäftigt und ich habe die Pause natürlich doch genutzt, um in dein Blatt zu schauen. Und schon stoße ich wieder auf Unerwartetes, hier die Nutzung der Ports. Sprut hatte den einen ganzen Port B genutzt (eine LED an PA) und das würde ich aus Gründen der Einfachheit bei der Programm-Übernahme auch verwenden, aber dann halt den kompletten Port C. Nun schreibst du, dass der nicht zur Verfügung stünde, weil "...die ANSEL/ANSELH-Pins für den ADC" gebraucht würden. Hm....., welcher ADC? Im Sprut'schen Prog wird mal der Zustand des PortsB abgefragt, aber von ADC ist nichts zu sehen. Vermute, da ist dir von einem anderen Prog was in dein nächtliches Papier rein gerutscht.
Grüße, picass
#12
O
Compiler Software / Aw: Seltsames Programmieren
Letzter Beitrag von Ottmar - 19.10.2024, 13:52:26 CEST
picass,
mach' Dir keine Sorgen um meine Nachtruhe, bin ein "Spät-ins-Bett-Geher". So viel Aufwand war das auch wieder nicht.
#13
P
Compiler Software / Aw: Seltsames Programmieren
Letzter Beitrag von picass - 19.10.2024, 12:26:11 CEST
Zitat von: Ottmar in 18.10.2024, 23:48:18 CEST......Sprut hat wohl früher mal für einen anderen PIC die LCD-Routine entworfen......
Das hatte ich mir auch gedacht. Mache ich ja selbst so, dass in aller Regel für ein neues Projekt ein früher verwendetes Prog ausgesucht wird, welches in etwa sinnvoll aufzugreifen wäre und dann geht es ans Anpassen.

Au man......, Ottmar, das hat dich die Nachruhe gekostet, was mir gleich ein schlechtes Gewissen vermittelt. Und dann muss ich noch gestehen, dass ich nicht stante pede dran gehen kann, denn heute kommt zwecks Geburtstagsnachfeier Besuch von der puckeligen Verwandtschaft und bleibt auch bis in späte Stunden. Aber sei gewiss, dass ich den erstellten Ausdruck akribisch bearbeiten werde. Weil....., es muss endlich mal sein, dass auch ich als Spät-Nachzügler LCD-Ausgabe handeln kann. Danke für die Nachtschicht und ich hoffe, dass du ausreichend Zeit zum Ausschlafen gehabt haben wirst.
Danke und In diesem Sinne nun um 12:20 Uhr ein herzlicher Guten-Morgen-Gruß, Bernd

#14
O
Compiler Software / Aw: Seltsames Programmieren
Letzter Beitrag von Ottmar - 18.10.2024, 23:48:18 CEST
HI picass
Zitat
[Jetzt frage ich mich recht bange, ob ich spinne oder der Sprut. Bei einem so niedlichen µC wie dem PIC16F84 mit der ungeheuren Portzahl von zwei (!) - in Worten: 2 (!) - führt er gänzlich unnötig zwei Konstante ein...]

Sprut hat wohl früher mal für einen anderen PIC die LCD-Routine entworfen (ändert sich auch in Zukunft nicht mehr). Dabei wurde eben PORTC für die  Controlbits (E, RS, RW) und PORTD für die Datenübrtragung D7:4 verwendet. 

PORTC equ PORTB ; LCD-Control-Port
PORTD equ PORTB ; LCD-Daten-Port

damit erfolgt  die Anpassung der LCD-Routinen an den PORTB des 16F84 ohne die LCD-Routine umändern zu müssen.

Ich bevorzuge es da eindeutiger, wie nachstehend, obwohl es an der Auswirkung nichts ändert..
LCD_PORT  equ PORTB
LCD_LAT.....
LCD_TRIS....
LCD_E    equ  RB3 (ist ja tatsächlich nur die .3)
LCD_RW   equ  RB2
LCD_RS   equ  RB1

Control- und Datenport können auch getrennt sein. Die Datenbits 7:4 wird man wohl bei einem PORT belassen. Eine Trennung vom Controlport kann aber dann erforderlich sein wenn PORTB wie z.B. bei Deinem Lieblingspic, nur 4 Bits hat, dann kann wie folgt vorgegangen werden:
PORT C ist  nicht verfügbar, da hiervon die ANSEL/ANSELH-pins für den ADC gebraucht werden
LCD_PORT equ PORTB    ;RB7:4 -> LCD D7:4
LCD_CTRL equ PORTA    ;Controlbits
LCD_E equ    RA2      ;(ist ja tatsächlich nur die .2)
LCD_RW equ   RA1
LCD_RS equ   RA0

Die Controlbits werden dann mit 
bsf/bcf  LCD_CTRI, bsf/bcf LCD_E usw 1/0 gesetzt.

Bei der Initialisierung der Register (SFR's etc) kann man dann die Labels gleich mit  verwenden:
clrf   LCD_PORT
clrf   LCD_LAT       ; nicht beim 16F84
movlw  b......
movwf  LCD_TRIS      ; verwendet werden sollen 
movlw  b'.....
movwf  ANSEL
movlw  b'.....
movwf  ANSELH

Im Hautprogramm verbessert es die Übersicht, werden verschiedene Labels für den gleichen PORT verwendet. Braucht man z.B einen
KEY_PORT für Pushbuttons oder/und einen ADC_PORT für ein paar Analog-pins, weiß man auf den ersten Blick, um was es gerade geht.

Optimal ist es weiterhin die ganzen LCD-spezifischen Deklarationen und Unterprogramme in einer INIT-Datei unterzubringen, benannt nach dem LCD-Prozessor, z. B "HD44780_4Bit_Init.INC", Dann kann diese in jedem anderen Programm, stets wieder verwendbar, eingefügt und hinsichtlich des/der PORTs einfach angepasst werden: 
#include <HD44780_4Bit_Init.INC>

Ich kann Dir auch nicht ersparen, darauf hinzuweisen, daß Deine von Dir bevorzugte Taktfrequenz von 31kHz (wenn ich mich nicht irre), wohl am besten auf wenigstens 4MHz erhöhen werden sollte, falls eine rasche, nicht stotternde LCD-Ausgabe erreicht werden soll. Na, ja funktioniert wird es auch langsamer, dann kann man eben zusehen wie es funktioniert :-) .. :-).
8)
mfG Ottmar
#15
P
Compiler Software / Aw: Seltsames Programmieren
Letzter Beitrag von picass - 18.10.2024, 18:48:39 CEST
Ottmar....., du Schlingel! Du bist für mich viel zu schnell. Habe gerade erst dein voriges Programm angeschaut und zu einer praktischen Umsetzung - also dem Versuch einer Ausgabe - ist noch ein weiter Weg. Dieses vorige Prog ist - soweit ich das richtig sehe - der gleiche Bestandteil wie der im Sprut-Prog, nur dass andere Konstante/Variable gewählt wurden. Wie auch immer...., gemach.

pic18: einen Screenshot kannst du ohne Problem in das einfache Win-Prog im Zubehör namens "Paint" einfügen und dann in beliebigen Formaten - falls möglich natürlich J-Peg - in eine hier einstellbare Datei exportieren, rsp. speichern.

Gettz... Ottmar....kommt die angekündigte zweite Prob-Stelle. Ich hänge noch viel weiter vorne im Sprut'schen Prog fest. Da definiert er 7 Konstante. Die letzten fünf sind klar, aber mit den beiden ersten kann ich wenig anfangen. Ließe sich aber auch anders sagen: nach meiner Meinung ist er da tückisch fünfmal über Bande gegangen, um nichts anderes zu tun, als einen Port-Status auszulesen. Die beiden ersten Konstanten lauten:
PORTC  Equ PORTB
PORTD  Equ PORTB

Das verstehe ich so, dass der Status von PortB einmal der Constanten PORTC zugewiesen wird und ein ander mal derselbe B-Status der Constanten PORTD. Später in seinem Prog in den Teilprogs "BusyLoop", "OutLcdConrtrol" und "OutLcdDaten" werden diese K's benutzt, meist, um ein Bit zu setzen, einmal aber auch, um Port B zu lesen und das Ergebnis an eine Variable namens "LcdStatus" zu übergeben.

Jetzt frage ich mich recht bange, ob ich spinne oder der Sprut. Bei einem so niedlichen µC wie dem PIC16F84 mit der ungeheuren Portzahl von zwei (!) - in Worten: 2 (!) - führt er gänzlich unnötig zwei Konstante ein mit Namen von Ports, die es gar nicht gibt. Und einer der beiden Konstanten wird nur ein einziges Mal benutzt !!! Einfach gesagt: viel umständlicher geht es wirklich nicht. Statt einfach den Port auszulesen und das in die gewünschte Variable zu übergeben dann so'n Wirrwar! Konstante sollen das Leben erleichtern, aber nicht verdunkeln und zu minutenlangem Kontrollieren, Gegenlesen, Vergleichen, Grübeln und Sich-Wundern führen! Bin gerade stinkig. Und hoffe, dass so richtig gelesen zu haben. Watt'n Veitstanz um das einfache Auslesen eines Ports!!!
Grüße, picass
#16
P
Compiler Software / Aw: Seltsames Programmieren
Letzter Beitrag von pic18 - 18.10.2024, 15:33:53 CEST
Leider kann ich kein Bild-screen hochladen.
Unter " Produktion/ Set Projekt Configuration/Customize.." dann Conf: kannst Du den Compiler auswählen.
Bei mir steht in Compiler Toolchain:
mpasm (v5.54) [C:\Program Files (x86)\Microchip\mplabc18\v3.47\mpasm]
#17
O
Compiler Software / Aw: Seltsames Programmieren
Letzter Beitrag von Ottmar - 18.10.2024, 12:14:43 CEST
@picass
Temp RES 1
............
movlw  d'5'  -> dezimal 5
movlw  .5    -> dezimal 5
movlw  "H"   -> automatische Wandlung zu ASCii(72)
................
movlw  LOW  Temp   -> Adresse Low-Byte des Registers "Temp"
movlw  HIGH Temp   ->         HIG-Byte
.................
Out_LCD_Menue:
;--Ausgabe z.B. Text-Infos oder eine Ausgabemase: "Vdd: ...V" Der Meßwert wird dann
; imweiteren Programmlauf eingefügt
  movlw    HIGH table_start    ;H-Byte der Adresse einer LUT (LookUpTable)
                               ;mit Text zur LCD-Ausgabee
  movwf    pntr1               ;Adresse H-Byte in H-Zeiger
  movlw    LOW  table_start    ;dasselbe, allerdings L-Byte 
  movwf    pntr0 
  movlw    d'4'                ;Übergabe im WREG ->LCD 4zeilige Tabellenausgabe
  CALL     LcdOut_Table_1      ;Subroutine zur Ausgabe im LCD
#18
P
Compiler Software / Aw: Seltsames Programmieren
Letzter Beitrag von pic18 - 18.10.2024, 11:45:56 CEST
Zitat"einfache Übersetzung" vom alten MPASM zur mittleren Version des MPASM X

kannst Du den Assembler MPASM nicht integrieren? Ich mache es schon immer mit dem C-Compiler, benutze noch den alten C18 Compiler auf MPLABX
#19
P
Compiler Software / Aw: Seltsames Programmieren
Letzter Beitrag von picass - 18.10.2024, 11:05:25 CEST
Sicher ist ein Apostroph richtig.
Anbei: das ist typisch für die vieeeelen Stolperstellen, mit denen man leben muss, wenn man nicht täglich und beruflich, sondern als Gelegenheitstäter sich auf Assembler einlässt.

Danke, Ottmar, für deine Erläuterung und dein Beispiel. Werde heute im Laufe des Tages das zu verarbeiten versuchen. Bitte bleibt in diesem Fred am Ball, es gibt noch Anderes, was mir die vermeindlich "einfache Übersetzung" vom alten MPASM zur mittleren Version des MPASM X [bis Version 5.35] schwer macht.
Grüße, picass
#20
P
Compiler Software / Aw: Seltsames Programmieren
Letzter Beitrag von pic18 - 18.10.2024, 09:51:26 CEST
ich bin mir nicht sicher ob es nicht:
movlw  'H'

anstatt
movlw  "H"
heißen muss