PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Unbekanntes Display ansteuern aber wie ??? komm nicht weiter



Looser
15.10.2007, 23:08
Hallo Leute,
ich hab hier ein Display

http://www.sbprojects.com/knowledge/footprints/sda5708.htm

und möchte es mit Bascom ansteuern. Leider habe ich es nicht geschafft ein Zeichen darauf darzustellen. Assembler ist für mich ein Fremdwort. Vielleicht gibt es unter euch jemanden der mir den Code ein wenig erleutern kann oder gar einen Beispielschnipsel hat. Ich wäre schon froh nur einen kleinen Einstieg zu finden und nur ein zeichen auf dem Display zu sehen.
Besten Dank schon Vorab.
Gruss Harald

mlgahoc
16.10.2007, 07:21
Hallo,

schau mal in die Bascom Hilfe für den Befehl shiftout.

Ansonsten ist in dem angegebenen Link alles Wichtige beschrieben.
Das Display hat keinen eingebauten Zeichengenerator. Jeder Punkt der Matrix kann einzeln angesteuert werden.

Gruß Manfred
www.malo-web.de

Looser
16.10.2007, 14:59
Hallo Manfred,
Die ansteuerung der Matrix verstehe ich schon nur bei SHIFTOUT komme ich überhauptnicht klar...

Ist das so richtig???

$regfile = "2313def.dat"
$crystal = 4000000
Dim X As Byte
X = &B00100000
Shiftout Portd.1 , Portb.7 , X , 2 , 8 , 0
End

Was bedeuten jetzt 2 , 8 , 0 ???

X soll gesendet werden mit Portd.1
Portb7 habe ich an SDCLOCK am Display angeschlossen.
Portd.1 ist and DATA vom Display dran.
Dann gibt es noch ein -LOAD am Display das habe ich noch nicht dran.

Ich hoffe sehr au eure Mithilfe.
Gruss Harald

theborg
16.10.2007, 17:07
hi an dem display bin ich auch gerade bei ist aus der dbox1 eigentlich ist die ansteuerung recht simpel.

http://sbprojects.com/knowledge/footprints/sda5708.htm

mlgahoc
16.10.2007, 17:47
Hallo,

ein Ansatz mit BASCOM.
Ist ungetestet, da ich das Display nicht habe.
Bei Quarztaktung müssen die Fuses entspechend eingestellt werden.
Bei hohen Taktfrequenzen muß eventuell bei shiftout noch ein Delay hinzugefügt werden.

Gruß Manfred
www.malo-web.de



'************************************************* ************************************************** **************
' BASCOM AVR Compiler 1.11.8.7
' ATMega8 Applikation
'
' Manfred Look
' webmaster@malo-web.de
' http://www.malo-web.de
'
' Demo shiftout mit SDA5708-24 Display
' 10/2007
' V1.00
'
' Takt: intern 1MHz
'
' SDA5708-24 Reset-Pin: 10KOhm -> VCC und 10n -> GND
'
'************************************************* ************************************************** **************
'
'--compiler directives--------------------------------------------------------------------------------------------
'
$regfile = "m8def.dat" 'Chip auswaehlen: ATMega8
$crystal = 1000000 'Taktfrequenz (Hz) festlegen
$hwstack = 32 'Hardware Stack
$swstack = 8 'Software Stack
$framesize = 20 'Framsize
'
'--variable-------------------------------------------------------------------------------------------------------
'
Dim Send As Byte '8Bit Variable die serial ausgegeben wird
'
'--alias----------------------------------------------------------------------------------------------------------
'
_load Alias Portb.2 'Daten gueltig
_data Alias Portb.4 'Daten
_sdclk Alias Portb.5 'Takt

'--init program---------------------------------------------------------------------------------------------------
'
'Initialisierung Ports
Ddrb = &B00110100 'Port B, 1=Ausgang
'
Waitms 100 'warten bis anzusteuernder Baustein bereit
'
'Initialisierung Ausgaben
Send = &B11000000 'Display init
Gosub _ser_output
Send = &B10100000 'Digit 0
Gosub _ser_output
Send = &B00011111 'Row 0
Gosub _ser_output
Send = &B00001110 'Row 1
Gosub _ser_output
Send = &B00000100 'Row 2
Gosub _ser_output
Send = &B00000100 'Row 3
Gosub _ser_output
Send = &B00000100 'Row 4
Gosub _ser_output
Send = &B00001110 'Row 5
Gosub _ser_output
Send = &B00011111 'Row 6
Gosub _ser_output
'
End
'
'Serielle Schnittstelle
_ser_output:
Reset _load 'bereit
Shiftout _data , _sdclk , Send , 3 '8Bit senden, LSB zuerst, Takt steigende Flanke
Set _load 'fertig
Return

theborg
16.10.2007, 22:15
Hi bei mir sieht das momentan wie folgt aus, hab es aber noch nicht getestet da mein Bord einen Schuss weg hat, passt ja hab gestern mit dem Display angefangen, momentan ist nur das init drinnen und das Löschen des Displays die tage werde ich mal die Tabellen für zeichen anfertigen.





;list p=16f628a
include "p16f628a.inc"

__CONFIG _WDT_OFF & _PWRTE_OFF & _INTOSC_OSC_NOCLKOUT & _MCLRE_OFF & _BOREN_OFF & _LVP_OFF & _DATA_CP_OFF & _CP_OFF

org 0x00
goto main
org 0x04

cblock 0x71
vfdsend
count
endc

#define sled PORTA,4

#define vfdload PORTB,0
#define vfddata PORTB,1
#define vfdsdclk PORTB,2
#define vfdrst PORTB,3

#define vfdinit 11100000
#define vfdcls 11000000

main
; Von Analog auf Digital Schalten
BSF CMCON, CM0
BSF CMCON, CM1
BSF CMCON, CM2
; PORTA
bsf STATUS, RP0 ; auf Bank 1 umschalten
movlw B'00000000' ; PortB I/O setzen (1=In, 0=Out) (Reinfolge RA7,RA6...)
movwf TRISA ; PortB I/O setzen
bcf STATUS, RP0 ; auf Bank 0 schalten
clrf PORTA ; PortB auf 0 setzen
; PORTB
bsf STATUS, RP0 ; auf Bank 1 umschalten
movlw B'00000000' ; PortC I/O setzen (1=In, 0=Out) (Reinfolge RB7,RB6...)
movwf TRISB ; PortC I/O setzen
bcf STATUS, RP0 ; auf Bank 0 schalten
clrf PORTB ; PortC auf 0 setzen
init
bsf sled ; set sled,load,rst auf hig
bsf vfdload
bsf vfdrst
movf vfdinit,w ; Display Inialisieren
movwf vfdsend
call datasend
loop
movf vfdcls,w ; Display Löschen
movwf vfdsend
call datasend
goto loop
datasend
movlw 7
movwf count
datasend1
bcf vfdload ; Load Low
btfss vfdsend,7
bsf vfddata
btfsc vfdsend,7
bcf vfddata
RLF vfdsend,1
bsf vfdload ; Load high
decfsz count,F ; Lösche ein bit von Count wenn Count = 0 dan F = 1 und überspringe den nästen befehl
goto datasend1 ; Gehe zu WaitWait
return
end

Looser
18.10.2007, 08:59
Super !!! habe das Display zum Leben erweckt.

Aber kann man folgendes nicht eleganter Lösen damit mein Program nicht so gross wird ? Hat jemand eine Idee?

Looser
18.10.2007, 09:00
Super !!! habe das Display zum Leben erweckt.

Aber kann man folgendes nicht eleganter Lösen damit mein Program nicht so gross wird ? Hat jemand eine Idee?

Send = &B11000000 'Display init
Gosub _ser_output
Send = &B10100000 'Digit 0
Gosub _ser_output
Send = &B00011111 'Row 0
Gosub _ser_output
Send = &B00001110 'Row 1
Gosub _ser_output
Send = &B00000100 'Row 2
Gosub _ser_output
Send = &B00000100 'Row 3
Gosub _ser_output
Send = &B00000100 'Row 4
Gosub _ser_output
Send = &B00001110 'Row 5
Gosub _ser_output
Send = &B00011111 'Row 6

mlgahoc
18.10.2007, 17:09
Hallo Harald,

schön das es funktioniert.
Nun musst Du aber Deinen (Programmier) Verstand einsetzen.
Stichworte sind:
ARRAY
indexieren
Schleifen

Ein Digit braucht 7Byte für Anzeige und 1Byte um das Digit zu adressieren.
Da führt kein Weg vorbei. Das ist nicht so wie bei einem LCD mit Controller.
Währe schön, wenn Du Deine Lösung dann mal hier reinstellst.

Gruß Manfred
www.malo-web.de

Looser
19.10.2007, 00:31
Hallo Manfred
Dank deiner Hilfe bin ich fast fertig mit meinem Program. Hätte ich ohne deine Denkanstösse nicht geschafft. Nochmals Danke
Gruss Harald



$regfile = "2313def.dat"
$crystal = 4000000 'Taktfrequenz (Hz) festlegen

Dim Send As Byte , X As Byte , Digit As Byte
Dim A As Byte


_load Alias Portb.2 'Daten gueltig
_data Alias Portb.4 'Daten
_sdclk Alias Portb.5 'Takt

Ddrb = &B00110100 'Port B, 1=Ausgang
Portd = &B0000100




Rem Wait 1 'warten bis anzusteuernder Baustein bereit

Send = &B11000000 'Display init
Gosub Senden
Send = 228 'Dimmen 224=100% bis231
Gosub Senden


'---------------------------------------------------------------------------------------------------


Dim Z As Byte
Dim Zeichen As Integer 'Zeichencode für Decoder
Dim Temp As String * 1 'Zwischenspeicher für Stringbearbeitung
Dim Index As Integer 'Zeichenposition für Caraktergenerator
Dim Text As String * 8 'Testvariable (später Empfangspuffer)




Anfang:

Inputbin A

Select Case A
Case &H93 : Text = " TV "
Case &H0C : Text = " DVD "
Case &H81 : Text = " RADIO "
Case &H8A : Text = " SAT "
Case &H9F : Text = " CD "
Case &H91 : Text = " ATAPE "
Case &H85 : Text = " VTAPE "
Case &H3B : Text = " VTAPE2 "
Case &H7C : Text = " A-AUX "
Case &H4D : Text = " V-AUX "
Case &H01 : Text = "STANDBY "
Case Else Goto Anfang
End Select




Z = 1
Digit = 160

Do

Send = Digit 'Digit0 bis 8 =160,161,162,163,164,165,166,167
Gosub Senden
Digit = Digit + 1

Temp = Mid(text , Z , 1) 'Zeichen aus String lesen und in
Zeichen = Asc(temp) 'Zeichencode dez. umwandeln.
Z = Z + 1 'Durchlaufzähler erhöhen und dann im
'Zeichendecoder Zeichen decodieren.
Index = Lookdown(zeichen , Zeichendecoder , 32)
Index = Index - 1 'gefundene Position um 1 korrigieren und
Index = Index * 7 'Anfang im Caraktergenerator berechnen.

For X = 0 To 6 'Pro Zeichen 7 Spalten ausgeben. Dazu
Send = Lookup(index , Zeichensatz) 'Code holen und Zähler erhöhen. Dann
Gosub Senden
Incr Index


Next X



Loop Until Z > 8

Goto Anfang




'------------------------------Serielle Schnittstelle----------------------------------------------------------
Senden:
Reset _load 'bereit
Shiftout _data , _sdclk , Send , 3 '8Bit senden, LSB zuerst, Takt steigende Flanke
Set _load
'fertig
Return




' ****************************
' * Zeichenmapping *
' ****************************

Zeichendecoder:

Data $32 , $48 , $49 , $50 , $51 , $52 , $53 , $54 , $55 , $56 , $57
Data $65 , $66 , $67 , $68 , $69 , $70 , $85 , $72 , $73 , $89 , $75
Data $76 , $86 , $84 , $79 , $80 , $78 , $82 , $88 , $83 , $45

' ***************************
' * Zeichentabelle *
' ***************************

Zeichensatz:

Data &B00000000 , &B00000000 , &B00000000 , &B00000000 , &B00000000 , &B00000000 , &B00000000 ' 32
Data &B00000100 , &B00010101 , &B00010001 , &B00010001 , &B00010001 , &B00010101 , &B00000100 '0 48
Data &B00000100 , &B00001100 , &B00000100 , &B00000100 , &B00000100 , &B00000100 , &B00001110 '1 49
Data &B00001110 , &B00010001 , &B00000010 , &B00000100 , &B00001000 , &B00010000 , &B00011111 '2 50
Data &B00011111 , &B00000001 , &B00000010 , &B00000110 , &B00000001 , &B00010001 , &B00001110 '3 51
Data &B00000010 , &B00000110 , &B00001010 , &B00010010 , &B00011111 , &B00000010 , &B00000010 '4 52
Data &B00011111 , &B00010000 , &B00010000 , &B00011110 , &B00000001 , &B00010001 , &B00001110 '5 53
Data &B00001111 , &B00010000 , &B00010000 , &B00011110 , &B00010001 , &B00010001 , &B00001110 '6 54
Data &B00011111 , &B00000001 , &B00000010 , &B00000100 , &B00000100 , &B00000100 , &B00000100 '7 55
Data &B00001110 , &B00010001 , &B00010001 , &B00001110 , &B00010001 , &B00010001 , &B00001110 '8 56
Data &B00001110 , &B00010001 , &B00010001 , &B00001111 , &B00000001 , &B00000001 , &B00011110 '9 57
Data &B00000100 , &B00001010 , &B00010001 , &B00011111 , &B00010001 , &B00010001 , &B00010001 'A 65
Data &B00011110 , &B00001001 , &B00001001 , &B00001110 , &B00001001 , &B00001001 , &B00011110 'B 66
Data &B00001110 , &B00010001 , &B00010000 , &B00010000 , &B00010000 , &B00010001 , &B00001110 'C 67
Data &B00011110 , &B00001001 , &B00001001 , &B00001001 , &B00001001 , &B00001001 , &B00011110 'D 68
Data &B00011111 , &B00010000 , &B00010000 , &B00011100 , &B00010000 , &B00010000 , &B00011111 'E 69
Data &B00011111 , &B00010000 , &B00010000 , &B00011100 , &B00010000 , &B00010000 , &B00010000 'F 70
Data &B00010001 , &B00010001 , &B00010001 , &B00010001 , &B00010001 , &B00010001 , &B00001110 'U 85
Data &B00010001 , &B00010001 , &B00010001 , &B00011111 , &B00010001 , &B00010001 , &B00010001 'H 72
Data &B00000100 , &B00000100 , &B00000100 , &B00000100 , &B00000100 , &B00000100 , &B00000100 'I 73
Data &B00010001 , &B00010001 , &B00001010 , &B00001010 , &B00000100 , &B00000100 , &B00000100 'Y 89
Data &B00010001 , &B00010010 , &B00010100 , &B00100010 , &B00010100 , &B00010010 , &B00010001 'K 75
Data &B00010000 , &B00010000 , &B00010000 , &B00010000 , &B00010000 , &B00010000 , &B00011111 'L 76
Data &B00010001 , &B00010001 , &B00010001 , &B00001010 , &B00001010 , &B00000100 , &B00000100 'V 86
Data &B00011111 , &B00000100 , &B00000100 , &B00000100 , &B00000100 , &B00000100 , &B00000100 'T 84
Data &B00001110 , &B00010001 , &B00010001 , &B00010001 , &B00010001 , &B00010001 , &B00001110 'O 79
Data &B00011110 , &B00010001 , &B00010001 , &B00011110 , &B00010000 , &B00010000 , &B00010000 'P 80
Data &B00010001 , &B00010001 , &B00011001 , &B00010101 , &B00010011 , &B00010001 , &B00010001 'N 78
Data &B00011110 , &B00010001 , &B00010001 , &B00011110 , &B00010100 , &B00010010 , &B00010001 'R 82
Data &B00010001 , &B00010001 , &B00001010 , &B00000100 , &B00001010 , &B00010001 , &B00010001 'X 88
Data &B00001110 , &B00010001 , &B00010000 , &B00001110 , &B00000001 , &B00010001 , &B00001110 'S 83
Data &B00000000 , &B00000000 , &B00000000 , &B00001110 , &B00000000 , &B00000000 , &B00000000 '- 45

[/php][/quote]

Arrow2004
06.11.2009, 23:51
Hallo Leute, lang her, seit meines letzten Postes!

Doch nun zurück zum Thema, ich habe hier auch dieses besagte Display, jedoch in verbindung mit dem RN-Control. Klappt auch alles soweit, jedoch weiß ich nicht, wie ich nun forzufahren haben, da ich mich damit überhaupt nicht auskenne!

- Daher, wie kann ich nun ganze Sätze ausgeben lassen, ohne jedoch für jedes Wort den aufwendigen Code einzutippen!?? - Also quasi nur den Text eingeben brauche und der Controller weiß, was er damit zu tun hat!??

- Oder spezielle Zeichen, sodass jeder Pixel einzeln angesteuert wird!??
(da brauche ich dann nur ein Beispiel, wie ich die Pixel unabhängig von einander zum leuchten bekommen kann: )

Bisher gibt es mir nur eine ...ja, Sanduhr auf dem ersten Feld aus!

...dann muss ich peinlich berührt fragen, ob mir jemand den Code so umändern kann, dass die Ansteuerung der LCD-Pins nicht so verstreut über die Ports verteilt ist, sondern direkt auf >einen< Port (welcher ist egal!) - da ich da noch nicht ganz durchsteige, warum z.B. DDRB den kompletten Port B steuert - definiert dies das B in DDR>B< ???

...ein einsteiger freundliches Tutorial würde mir auch reichen! ;)

Vielen Dank für eure Bemühungen schon mal im voraus!! Seit gute Leute! :D