Hallo alle,
Beim M50530 hab ich ja schon ne Positionierung drin. Kommt hier auch noch.
Der Befehl läuft jetzt. Die Berechnung der Adressen kommt jetzt noch.
Aber was mir noch aufgefallen ist ...
Es ist ein Sitronix ST7066U-
0A Controller drin
Das 0A ist nicht ganz unwichtig. Es bedeutet, das man einen
English/Japan-Zeichensatz im ROM hat. Schade. Die anderen
Zeichensätze haben Sonderzeichen, die man gut gebrauchen
könnte (Pfeile, ...)
==== Nachtrag wegen Tastenproblem ====
Ich hab beim programmieren ein kleines Problem mit den Tasten festgestellt.
Die Transistoren an den Tasten sind für den Prozessor zu langsam!
Ich muß die Teile irgendwie beschleunigen. Die BC547C die ich da einsetze
schalten und sperren nicht schnell genug. Der Mega48 ist mit seinen
50ns Zykluszeit zu flott
Mal ein wenig die grauen Zellen anstrengen
==== 2.Nachtrag wegen Tastenproblemen ====
Ich hab die Basis jedes BC547C mit 6,8k nach GND gelegt um die Ladung
schneller zu beseitigen und den Kollektor jedes BC547 habe ich auch noch
mit 6,8k nach +5V gezogen (vor dem Taster) damit die Transistoren
definierte Potentiale an den Anschlüssen haben. Es hat nix geholfen.
Wenn ich eine Taste drücke, dann zieht sich der Pegel bis zur 4ten
Tastenabfrage durch.
Seht euch mal den Code an ...
CodeBox ASM
; ==================================================================
; ===== Tasten abfragen ============================================
; ==================================================================
keyrd:
; push r16 ; r16 auf Stack retten (fuer wiederherstellung)
push r18 ; r18 auf Stack retten (fuer wiederherstellung)
; PB3 Keys --------- PCINT0 Tastenabfrage (Sammelpunkt der 4 Tasten)
; |
; PC0 D4 ---->o--\--+ ru (C2) (C3)
; |
; PC1 D5 ---->o--\--+ lu (C1) (C0)
; |
; PC2 D6 ---->o--\--+ lo =7= =6= =5= =4= =3= =2= =1= =0= <- r16 (Ergebnis)
; | 0 0 0 0 PC3 PC2 PC1 PC0 <- Taste-Bit
; PC3 D7 ---->o--\-- ro
clr r16 ; Eingangsregister loeschen
ldi r18,0b00001000 ; 00001000 Port fuer Taste3 auf High
out portc,r18 ; setzen
rcall wait750n
rcall wait750n
rcall wait750n
rcall wait750n
sbis pinb,3 ; Taste gedrueckt ? (PB3 auf Low)
sbr r16,0b00001000 ; Bit in r16 setzen
ldi r18,0b00000100 ; 00000100 Port fuer Taste2 auf High
out portc,r18 ; setzen
rcall wait750n
rcall wait750n
rcall wait750n
rcall wait750n
sbis pinb,3 ; Taste gedrueckt ? (PB3 auf Low)
sbr r16,0b00000100 ; Bit in r16 setzen
ldi r18,0b00000010 ; 00000010 Port fuer Taste1 auf High
out portc,r18 ; setzen
rcall wait750n
rcall wait750n
rcall wait750n
rcall wait750n
sbis pinb,3 ; Taste gedrueckt ? (PB3 auf Low)
sbr r16,0b00000010 ; Bit in r16 setzen
ldi r18,0b00000001 ; 00000001 Port fuer Taste0 auf High
out portc,r18 ; setzen
rcall wait750n
rcall wait750n
rcall wait750n
rcall wait750n
sbis pinb,3 ; Taste gedrueckt ? (PB3 auf Low)
sbr r16,0b00000001 ; Bit in r16 setzen
; sts keyreg, r16 ; Tastenabfrage speichern
pop r18 ; r18 wiederherstellen
; pop r16 ; r16 wiederherstellen
ret ; Subroutine Ende
Das heißt, wenn ich die Verzögerungen rausnehme, dann zieht sich der
Pegel bis zur letzen Abfrage durch ....
Taste 3 gedrückt => r16 = 0b00001111 (sollte 0b00001000 sein)
Taste 2 gedrückt => r16 = 0b00000111 (sollte 0b00000100 sein)
Taste 1 gedrückt => r16 = 0b00000011 (sollte 0b00000010 sein)
Taste 0 gedrückt => r16 = 0b00000001 (sollte 0b00000001 sein)
Schuld sind die BC547C. Die sind zu lahm und sperren zu langsam.
Ich hab jetzt aber keinen Bock mehr bei der Fisselschaltung die
Bipolaren gegen FETs zu tauschen. Ich bin ja kein Neurochirurg
Zum sperren brauchen die also in
dieser Schaltung so um
die 3 Microsekunden. Ist aber nicht so schlimm, da ich die
Tastenabfrage ja erst nach nem PinChangeInterrupt beim PB3
starten will.
Also als Tip: Erst nachdenken bevor man normale Transistoren einsetzt
Gruß
Dino