Verfügbare Informationen zu "Hard SPI mit ATMEGA möglich ?"
Qualität des Beitrags: Beteiligte Poster: avrnix - Kay Forum: www.comwebnet.de Forenbeschreibung: AVR Mikrocontroller und Elektronik - Forum - www.comwebnet.de aus dem Unterforum: Hardware Ansteuerung mit BASCOM Antworten: 48 Forum gestartet am: Mittwoch 25.10.2006 Sprache: deutsch Link zum Originaltopic: Hard SPI mit ATMEGA möglich ? Letzte Antwort: vor 16 Jahren, 3 Monaten, 13 Tagen, 10 Stunden, 43 Minuten
Alle Beiträge und Antworten zu "Hard SPI mit ATMEGA möglich ?"
Re: Hard SPI mit ATMEGA möglich ?
avrnix - 26.10.2006, 20:29Hard SPI mit ATMEGA möglich ?
Es soll jemand mit einen MEGA168 das S65 Display über Hard SPI angesteuert haben.
Hier der Code - läuft aber nicht auf einen MEGA 16/32 - Warum :oops: ?
Wer hast es ausprobiert und mit welchen Ergebnis ?
'# Code:
'# HWStack,Softstack,Frameside hoch setzten > 64-128
'# www.comwebnet.de
'# Wenn es geht melde dich bitte!
'# Der Code soll nach dem Author OK sein
$regfile = "m168def.dat"
$crystal = 8000000
'Ddrb = &B11111111 'Port C als Output
'Ddrc = &B11111111
Clk Alias Portb.7
Dat Alias Portb.5
Rs Alias Portb.0
Rst Alias Portb.4
Cs Alias Portc.0
Const Cblue = &B0000000000011111
Dim A As Word
Declare Sub Setpixel(byval X As Byte , Byval Y As Byte , Byval Cf As Word)
Declare Sub Shout()
Declare Sub Lcd_init()
Declare Sub Fillscreen()
Declare Sub Defpartxyxy(byval X1 As Byte , Byval Y1 As Byte , Byval X2 As Byte , Byval Y2 As Byte)
Declare Sub Defpartxwyh(byval X As Byte , Byval W As Byte , Byval Y As Byte , Byval H As Byte)
Declare Sub Circ(byval X As Byte , Byval Y As Byte , Byval R As Byte , Byval Cf As Word)
Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = High , Phase = 1 , Clockrate = 4 , Noss = 1
Spiinit
Set Spsr.spi2x
'------------------------------------------------------------------- Ende HW-Init
Call Lcd_init
A = Cblue
Call Fillscreen
End
Sub Shout
lds r23, {a+1}
!out spdr, r23
lds r23, {a}
Wait_trh:
sbis spsr, spif
rjmp wait_trh
!out spdr, r23
Wait_trl:
sbis spsr, spif
rjmp wait_trl
End Sub
Sub Lcd_init
Dim Lcd_init_ctr As Byte
Pushall
Rst = 1
Waitms 10
Rst = 0
Cs = 1
Clk = 1
Dat = 1
Rs = 1
Waitms 4
Rst = 1
Waitms 50
Cs = 1
Waitms 4
Rs = 1
Cs = 0
LDI ZL, Low(init1 * 2)
LDI ZH , High(init1 * 2)
ldi r20, 12
rcall Getinitbytes
push r30: push r31 'since used by waitms()
Waitms 50
pop r31: pop r30
ldi r20, 21
rcall Getinitbytes
push r30: push r31
Waitms 50
pop r31: pop r30
ldi r20, 2
rcall Getinitbytes
Rs = 0
Cs = 1
Cs = 0
Rs = 1
A = &HEF90
Shout
A = &H0504
Shout
A = &H0600
Shout
A = &H0700
Shout
Rs = 0
Cs = 1
Popall
End Sub
Getinitbytes:
!nextbyte3:
lpm r26, z+
lpm r27, z+
sts {a+1}, r27
Sts {a} , R26
Shout
subi r20,1
sbis sreg,1
rjmp nextbyte3
ret
Init1:
Data &HFDFD% , &HFDFD%
Data &HEF00%
Data &HEE04% , &H1B04%
Data &HFEFE% , &HFEFE%
Data &HEF90% , &H4A04% , &H7F3F% , &HEE04% , &H4306% 'Init2:
Data &HEF90% , &H0983% , &H0800% , &H0BAF% , &H0A00% , &H0500% , &H0600% , &H0700%
Data &HEF00%
Data &HEE0C%
Data &HEF90% , &H0080%
Data &HEFB0% , &H4902%
Data &HEF00%
Data &H7F01% , &HE181%
Data &HE202%
Data &HE276%
Data &HE183%
Data &H8001%
Data &HEF90%
Data &H0000%
'------------------------------------------------------------------- Ende LCD-Init
Sub Fillscreen
push r25: push r24
Cs = 0
lDi R25 , &H5A
ldi r24, &Hc0
!loopa:
Shout
Sbiw r24,1
sbis sreg,1
rjmp loopa
Cs = 1
pop r24: pop r25
End Sub
'------------------------------------------------------------------- Ende Bsp '(fuellt kompl. Screen blau)
Sub Defpartxyxy(byval X1 As Byte , Byval Y1 As Byte , Byval X2 As Byte , Byval Y2 As Byte)
Y2 = Y2 - Y1 'h
X2 = X2 - X1 'w
Call Defpartxwyh(x1 , X2 , Y1 , Y2)
End Sub
Sub Defpartxwyh(byval X As Byte , Byval W As Byte , Byval Y As Byte , Byval H As Byte)
Cs = 0
Rs = 1
A = &HEF90
Shout
A = &H0504
Shout
A = &H0800 + Y
Shout
A = A + H
A = A Or &H0100
Shout
A = &H0A00 + X
Shout
A = A + W
A = A Or &H0100
Shout
Rs = 0
Cs = 1
End Sub
'------------------------------------------------------------------- Ende Subs zum Definieren von Fenstern
Sub Circ(byval X As Byte , Byval Y As Byte , Byval R As Byte , Byval Cf As Word)
Dim D1 As Integer , Dx1 As Integer , Dxy As Integer
Dim X1 As Integer , Y1 As Integer
X1 = 0
Y1 = R
D1 = 1 - R
Dx1 = 3
Dxy = -2 * R
Dxy = Dxy + 5
Dim Px As Byte
Dim Py As Byte
While Y1 >= X1
Px = X + X1 'p.x + X
Py = Y + Y1 'P.y + Y
Call Setpixel(px , Py , Cf)
Px = X + Y1 'p.x + Y
Py = Y + X1 'P.y + X
Call Setpixel(px , Py , Cf)
Px = X + Y1 'P.x + Y
Py = Y - X1 'P.y -x
Call Setpixel(px , Py , Cf)
Px = X + X1 'P.x + X
Py = Y - Y1 'P.y -y
Call Setpixel(px , Py , Cf)
Px = X - X1 'P.x -x
Py = Y - Y1 'P.y -y
Call Setpixel(px , Py , Cf)
Px = X - Y1 'P.x -y
Py = Y - X1 'P.y -x
Call Setpixel(px , Py , Cf)
Px = X - Y1 'P.x -y
Py = Y + X1 'P.y + X
Call Setpixel(px , Py , Cf)
Px = X - X1 'P.x -x
Py = Y + Y1 'P.y + Y
Call Setpixel(px , Py , Cf)
If D1 < 0 Then
D1 = D1 + Dx1
Dx1 = Dx1 + 2
Dxy = Dxy + 2
Incr X1
Else
D1 = D1 + Dxy
Dx1 = Dx1 + 2
Dxy = Dxy + 4
Incr X1 : Decr Y1
End If
Wend
End Sub
Sub Setpixel(byval X As Byte , Byval Y As Byte , Byval Cf As Word)
Cs = 0
Rs = 1
ldi r20,0
ldi r21,&H09
rcall shoutr2625
ldi r21, &H0B
rcall shoutr2625
ldi r21, &H0a
ldd r26, y+4
ldd r27 , y+5
ld r20,x
rcall shoutr2625
ldi r21, &H08
ldd r26, y+2
ldd r27 , y+3
ld r20,x
rcall shoutr2625
Rs = 0
ldd r26, y+0
ldd r27 , y+1
ld r20, x+
ld r21,x
Rcall shoutr2625
Cs = 1
End Sub
!shoutr2625:
!out spdr, r21
Wait_trh2:
sbis spsr, spif
rjmp wait_trh2
!out spdr, r20
Wait_trl2:
sbis spsr, spif
rjmp wait_trl2
ret
Re: Hard SPI mit ATMEGA möglich ?
Kay - 15.12.2006, 12:51
hallo,
hat es mittlerweile jemand geschafft, das ganze mit nem mega32 in hard spi zu machen ?
mfg Kay
Re: Hard SPI mit ATMEGA möglich ?
avrnix - 15.12.2006, 13:36
Hatte mal das auf einen Mega32 getestet und läuft nicht!
Im Moment komme ich da auch nicht weiter da ich am Umziehen bin und einen Lehrgang habe der 8 Monate dauert und 8 Prüfungen machen muss.
Und Internet habe ich im Moment nur während des Lehrgangs.
Hast du mal auf einen anderen Mega Controller ausprobiert?
AVRNix
:?
Re: Hard SPI mit ATMEGA möglich ?
Kay - 15.12.2006, 22:57
ich habe es auf nem mega8, 16, 32 probiert. läuft nirgends. ich werde mir nun mal ein Testboard mit nem mega128 / MMC/SD Connector / RS232 usw.... aufbauen. Werde das Display sowohl an HardSPI als auch an beliebigen Ports anschließen könnnen. Dann werde ich das alles nochmal probieren. mfg Kay
Re: Hard SPI mit ATMEGA möglich ?
avrnix - 18.12.2006, 08:28
Versuche es mal mit einen M168 wenn es geht, es soll angeblich dort laufen.
Ich kann mir aber nicht vorstellen warum es nicht auch auf den anderen Megas laufen soll.
:?
Re: Hard SPI mit ATMEGA möglich ?
Kay - 18.12.2006, 13:07
hi,
ich bestell mir mal nen mega168 ( dip ) dann kann ich es probieren. Aber wie Du schon sagtest, kann ich mir auch nicht vorstellen, warum es mit dem mega168 klappen sollte.
mfg Kay
Re: Hard SPI mit ATMEGA möglich ?
avrnix - 18.12.2006, 14:54
Wenn du das machst und es wird nichts - frage den Author im
http://www.mikrocontroller.net/topic/31403#242002
Da er ja Hard-SPI angeblich programmiert hat und den hier geposten Code für richtig gehalten wurde.
Bitte lass kund tun ob es geklappt hat.
Re: Hard SPI mit ATMEGA möglich ?
Kay - 04.01.2007, 00:36
Hi und juhuuuuuuuuuuuuuu,
es klappt bei mir mit nem mega16 @ 16Mhz. Der Fehler an dem Programm liegt an der definition der Ports.
Code:
$regfile = "m16def.dat"
$crystal = 16000000
Ddrb = &B11111111 'Port C als Output
'Ddrc = &B11111111
Clk Alias Portb.7
Dat Alias Portb.5
Rs Alias Portb.0
Rst Alias Portb.3
Cs Alias Portb.4
so klappts mit nem mega16. Jetzt müsste man nur noch wissen, wie man Texte darstellen kann.
jetzt kanns losgehen. testet es mal und postet euer Ergebnis
mfg Kay
Re: Hard SPI mit ATMEGA möglich ?
avrnix - 08.01.2007, 19:22
@Kay: Kannst du Punkte bzw. Linien darstellen ?
Wenn das geht - sind Buchstaben auch kein Problem mehr - !
Werde das erst am Wochen ende machen können.
Könntest du mal den ganzen Code hier Posten. Ich sehe den Fehler nicht.
Gruss
AVRNix
Re: Hard SPI mit ATMEGA möglich ?
Kay - 08.01.2007, 22:21
ja einzelne pixel kann ich setzen.
dieser code zeichnet erst den kompletten Bildschirm weiss und setzt bei X=50, Y=50 einen blauen Pixel
hier ist der code:
Code:
'# Code:
'# HWStack,Softstack,Frameside hoch setzten > 64-128
'# www.comwebnet.de
'# Wenn es geht melde dich bitte!
'# Der Code soll nach dem Author OK sein
$regfile = "m16def.dat"
$crystal = 16000000
$hwstack = 64
$swstack = 64
$framesize = 128
Ddrb = &B11111111 'Port C als Output
'Ddrc = &B11111111
Clk Alias Portb.7
Dat Alias Portb.5
Rs Alias Portb.0
Rst Alias Portb.3
Cs Alias Portb.4
Const Blau = &B0000000000011111
Const Gelb = &B1111111111100000
Const Rot = &B1111100000000000
Const Gruen = &B0000011111100000
Const Schwarz = &B0000000000000000
Const Weiss = &B1111111111111111
Const Hellgruen = &B1001111111110011
Const Dunkelgruen = &B0000001101100000
Const Dunkelrot = &B1001100000000000
Const Dunkelblau = &B0000000000010011
Const Hellblau = &B1101111011011111
Const Orange = &B1111110011000110
Const Orange2 = &B1111101110000011
Const Lila = &B1111100000011111
Dim A As Word
Dim X As Byte
Dim Y As Byte
Dim X1a As Byte
Dim Y1a As Byte
Dim Z As Word
Dim X3 As Byte
Dim Y3 As Byte
Dim U1 As Byte
Dim U2 As Byte
Dim K As Word
Dim L As Word
Declare Sub Setpixel(byval X As Byte , Byval Y As Byte , Byval Cf As Word)
Declare Sub Shout()
Declare Sub Lcd_init()
Declare Sub Fillscreen()
Declare Sub Defpartxyxy(byval X1 As Byte , Byval Y1 As Byte , Byval X2 As Byte , Byval Y2 As Byte)
Declare Sub Defpartxwyh(byval X As Byte , Byval W As Byte , Byval Y As Byte , Byval H As Byte)
Declare Sub Circ(byval X As Byte , Byval Y As Byte , Byval R As Byte , Byval Cf As Word)
Config Spi = Hard , Interrupt = On , Data Order = Msb , Master = Yes , Polarity = High , Phase = 1 , Clockrate = 4 , Noss = 1
Spiinit
Set Spsr.spi2x
'------------------------------------------------------------------- Ende HW-Init
Call Lcd_init
A = Weiss
Call Fillscreen
Wait 1
Call Setpixel(50 , 50 , blau)
End
Sub Shout
lds r23, {a+1}
!out spdr, r23
lds r23, {a}
Wait_trh:
sbis spsr, spif
rjmp wait_trh
!out spdr, r23
Wait_trl:
sbis spsr, spif
rjmp wait_trl
End Sub
Sub Lcd_init
Dim Lcd_init_ctr As Byte
Pushall
Rst = 1
Waitms 10
Rst = 0
Cs = 1
Clk = 1
Dat = 1
Rs = 1
Waitms 4
Rst = 1
Waitms 50
Cs = 1
Waitms 4
Rs = 1
Cs = 0
LDI ZL, Low(init1 * 2)
LDI ZH , High(init1 * 2)
ldi r20, 12
rcall Getinitbytes
push r30: push r31 'since used by waitms()
Waitms 50
pop r31: pop r30
ldi r20, 21
rcall Getinitbytes
push r30: push r31
Waitms 50
pop r31: pop r30
ldi r20, 2
rcall Getinitbytes
Rs = 0
Cs = 1
Cs = 0
Rs = 1
A = &HEF90
Shout
A = &H0504
Shout
A = &H0600
Shout
A = &H0700
Shout
Rs = 0
Cs = 1
Popall
End Sub
Getinitbytes:
!nextbyte3:
lpm r26, z+
lpm r27, z+
sts {a+1}, r27
Sts {a} , R26
Shout
subi r20,1
sbis sreg,1
rjmp nextbyte3
ret
Init1:
Data &HFDFD% , &HFDFD%
Data &HEF00%
Data &HEE04% , &H1B04%
Data &HFEFE% , &HFEFE%
Data &HEF90% , &H4A04% , &H7F3F% , &HEE04% , &H4306% 'Init2:
Data &HEF90% , &H0983% , &H0800% , &H0BAF% , &H0A00% , &H0500% , &H0600% , &H0700%
Data &HEF00%
Data &HEE0C%
Data &HEF90% , &H0080%
Data &HEFB0% , &H4902%
Data &HEF00%
Data &H7F01% , &HE181%
Data &HE202%
Data &HE276%
Data &HE183%
Data &H8001%
Data &HEF90%
Data &H0000%
'------------------------------------------------------------------- Ende LCD-Init
Sub Fillscreen
push r25: push r24
Cs = 0
lDi R25 , &H5A
ldi r24, &Hc0
!loopa:
Shout
Sbiw r24,1
sbis sreg,1
rjmp loopa
Cs = 1
pop r24: pop r25
End Sub
'------------------------------------------------------------------- Ende Bsp '(fuellt kompl. Screen blau)
Sub Defpartxyxy(byval X1 As Byte , Byval Y1 As Byte , Byval X2 As Byte , Byval Y2 As Byte)
Y2 = Y2 - Y1 'h
X2 = X2 - X1 'w
Call Defpartxwyh(x1 , X2 , Y1 , Y2)
End Sub
Sub Defpartxwyh(byval X As Byte , Byval W As Byte , Byval Y As Byte , Byval H As Byte)
Cs = 0
Rs = 1
A = &HEF90
Shout
A = &H0504
Shout
A = &H0800 + Y
Shout
A = A + H
A = A Or &H0100
Shout
A = &H0A00 + X
Shout
A = A + W
A = A Or &H0100
Shout
Rs = 0
Cs = 1
End Sub
'------------------------------------------------------------------- Ende Subs zum Definieren von Fenstern
Sub Circ(byval X As Byte , Byval Y As Byte , Byval R As Byte , Byval Cf As Word)
Dim D1 As Integer , Dx1 As Integer , Dxy As Integer
Dim X1 As Integer , Y1 As Integer
X1 = 0
Y1 = R
D1 = 1 - R
Dx1 = 3
Dxy = -2 * R
Dxy = Dxy + 5
Dim Px As Byte
Dim Py As Byte
While Y1 >= X1
Px = X + X1 'p.x + X
Py = Y + Y1 'P.y + Y
Call Setpixel(px , Py , Cf)
Px = X + Y1 'p.x + Y
Py = Y + X1 'P.y + X
Call Setpixel(px , Py , Cf)
Px = X + Y1 'P.x + Y
Py = Y - X1 'P.y -x
Call Setpixel(px , Py , Cf)
Px = X + X1 'P.x + X
Py = Y - Y1 'P.y -y
Call Setpixel(px , Py , Cf)
Px = X - X1 'P.x -x
Py = Y - Y1 'P.y -y
Call Setpixel(px , Py , Cf)
Px = X - Y1 'P.x -y
Py = Y - X1 'P.y -x
Call Setpixel(px , Py , Cf)
Px = X - Y1 'P.x -y
Py = Y + X1 'P.y + X
Call Setpixel(px , Py , Cf)
Px = X - X1 'P.x -x
Py = Y + Y1 'P.y + Y
Call Setpixel(px , Py , Cf)
If D1 < 0 Then
D1 = D1 + Dx1
Dx1 = Dx1 + 2
Dxy = Dxy + 2
Incr X1
Else
D1 = D1 + Dxy
Dx1 = Dx1 + 2
Dxy = Dxy + 4
Incr X1 : Decr Y1
End If
Wend
End Sub
Sub Setpixel(byval X As Byte , Byval Y As Byte , Byval Cf As Word)
Cs = 0
Rs = 1
ldi r20,0
ldi r21,&H09
rcall shoutr2625
ldi r21, &H0B
rcall shoutr2625
ldi r21, &H0a
ldd r26, y+4
ldd r27 , y+5
ld r20,x
rcall shoutr2625
ldi r21, &H08
ldd r26, y+2
ldd r27 , y+3
ld r20,x
rcall shoutr2625
Rs = 0
ldd r26, y+0
ldd r27 , y+1
ld r20, x+
ld r21,x
Rcall shoutr2625
Cs = 1
End Sub
!shoutr2625:
!out spdr, r21
Wait_trh2:
sbis spsr, spif
rjmp wait_trh2
!out spdr, r20
Wait_trl2:
sbis spsr, spif
rjmp wait_trl2
ret
'-----------------------------------------------------------
' LCD_text x1,y1,x2,y2,z,z2
'-----------------------------------------------------------
Der Fehler lag in der definition der Ports. die habe ich auf meinen jeweiligen Prozessor ( mega16 ) geändert und schon ging es. Nach dem brennen des µC´s muss ich jedoch den µC resetten.
mfg Kay
Re: Hard SPI mit ATMEGA möglich ?
avrnix - 09.01.2007, 15:50
Die Routinen zum Osziloskop Programm ( S65 Display ). Wo die Buchstben erzeugt werden könnte man einfügen und die ASCII Tabelle im EEPROM hinterlegen ( DATA Anweisungen unten ).
Dann hat man auch die Buchstaben wieder.
:D
Re: Hard SPI mit ATMEGA möglich ?
Kay - 10.01.2007, 00:04
hast Du es nun mal ausprobiert mit dem HardSPI ? wäre schön, wenn wir so ne Art "Library" machen könnten.
mfg Kay
Re: Hard SPI mit ATMEGA möglich ?
avrnix - 10.01.2007, 08:40
Nein - ich habe es noch nicht ausprobiert. Ich bin in LPI Prüfungsvorbereitung.
Ich komme erst am Wochenende dazu.
Allerdings wenn man ein Pixel darstellen kann , was über Hard-SPI läuft, sollte dann zur Darstellung von Buchstaben ein kleiner Schritt sein da die Routine ja schon da ist.
Werde es am Wochenende mal ausprobieren.
Frage: Um Wie viel mal schneller ist den Hard-SPI in der Ausgabe, als vorher ( PI x Daumen )?
Gruss
Dirk
:P
Re: Hard SPI mit ATMEGA möglich ?
Kay - 11.01.2007, 22:52
hi,
ich kann also keinen gravierenden Unterschied bemerkt. Nur das ich nach dem brennen des AVR, diesen resetten muss, bevor er was auf dem LCD anzeigt. Ich denke das es 1-2mal schneller ist.
Re: Hard SPI mit ATMEGA möglich ?
avrnix - 12.01.2007, 11:21
'#####################################################
'# ACSII Zeichenausgabe #
'#####################################################
Sub S65_zeichen(byval Lx As Byte , Byval Ly As Byte , Byval Bcol As Word , Byval Fcol As Word , Byval Lcd_text As String * 1)
Local R As Integer
Local A As Byte
Local B As Byte
Local C As Long
Local D As Byte
Local E As Byte
Local F As Byte
Local G As Long
Local Xpos As Byte
Local Ypos As Byte
Local Zeichen As String * 1
Print "S65_zeichen(" ; Lx ; "," ; Ly ; "," ; Bcol ; "," ; Fcol ; "," ; Lcd_text ; ")"
Xpos = 0
Ypos = 0
'For R = 1 To Len(lcd_text)
' Zeichen = Mid(lcd_text , R , 1) 'Hole char
G = Asc(lcd_text)
'Print "S65_Zeichen:" ; Lcd_text
'Print "ASCII:" ; G 'Bestimme Pos in Tabelle
G = G - 32
G = G * 6
Readeeprom B , G
A = 8 '1.linie frei
For F = 1 To 6
C = 1
D = B 'Byte darf nicht verändert werden für 2. durchlauf
For E = 1 To 8
Xpos = Lx + E ' Durch vertauschen von E, Lx, Ly, F, Ypos und Xpos
Xpos = 132 - Xpos ' lassen Sich die Buchstaben anders Darstellen.
Ypos = Ly + F ' Tauschen der E mit F und F mit E wird die Ausgabe
'Ypos = 176 - ypos ' geändert! auch mit Xpos und Ypos - ausprobieren!
A = D And 1
If A = 1 Then Call S65_pset(xpos , Ypos , Fcol)
If A = 0 Then Call S65_pset(xpos , Ypos , Bcol)
Shift D , Right , 1
Next
Decr C
G = G + 1
Readeeprom B , G
Next
'Ypos = Ypos + 6
'Next
End Sub
Spiele ein wenig mit den Parametern zum darstellen der Buchsteben:
Austausch von E und F. Statt Xpos=132-xpos mal Xpos=176-xpos und Ypos=132-ypos austauschen. Damit kannst du die Darstellung der Buchstaben ändern.
Ich hoffe ich konnte ein wenig Licht rein bringen.
:roll:
Re: Hard SPI mit ATMEGA möglich ?
Kay - 12.01.2007, 12:20
also,
ich habs grade mal probiert. bekomme das nicht so hin. wäre gut, wenn Du am Wochenende das mal probieren könntest und den code posten könntest.
mfg Kay
Re: Hard SPI mit ATMEGA möglich ?
Kay - 15.01.2007, 21:25
hi dirk,
wie läuft denn Deine Prüfung ? haste bestanden ?
Re: Hard SPI mit ATMEGA möglich ?
Kay - 15.01.2007, 22:52
hi,
nochmal zum spi. habe es jetzt geschafft, nen Text per spi zu schreiben. benutze folgenden code:
Code:
Sub S65_print(byval Lx As Byte , Byval Ly As Byte , Byval Bcol As Word , Byval Fcol As Word , Byval Lcd_text As String)
Local Xpos As Byte
Local Ypos As Byte
Local Zaehler As Byte
Local Laenge As Byte
Local Zeichen As String * 1
Laenge = Len(lcd_text)
For Zaehler = 1 To Laenge
Zeichen = Mid(lcd_text , Zaehler , 1)
Call S65_zeichen(lx , Ly , Bcol , Fcol , Zeichen)
Ly = Ly + 6
Next Zaehler
End Sub
Sub S65_zeichen(byval Lx As Byte , Byval Ly As Byte , Byval Bcol As Word , Byval Fcol As Word , Byval Lcd_text As String * 1)
Local R As Integer
Local A3 As Byte
Local B As Byte
Local C As Long
Local D As Byte
Local E As Byte
Local F As Byte
Local G As Long
Local Xpos As Byte
Local Ypos As Byte
Local Zeichen As String * 1
Print "S65_zeichen(" ; Lx ; "," ; Ly ; "," ; Bcol ; "," ; Fcol ; "," ; Lcd_text ; ")"
Xpos = 0
Ypos = 0
'For R = 1 To Len(lcd_text)
' Zeichen = Mid(lcd_text , R , 1) 'Hole char
G = Asc(lcd_text)
'Print "S65_Zeichen:" ; Lcd_text
'Print "ASCII:" ; G 'Bestimme Pos in Tabelle
G = G - 32
G = G * 6
Readeeprom B , G
'Call Lcd_locate(lcd_posx , Lcd_posy)
A3 = 8 '1.linie frei
'If Lcd_doublesize = 1 Then A = 16
'If Lcd_doublesize = 2 Then A = 32
For F = 1 To 6
C = 1
D = B 'Byte darf nicht verändert werden für 2. durchlauf
For E = 1 To 16
Xpos = Lx + E
Xpos = 132 - Xpos
Ypos = Ly + F
'ypos = 176 - Ypos
A3 = D And 1
If A3 = 1 Then Call Setpixel(xpos , Ypos , Fcol)
If A3 = 0 Then Call Setpixel(xpos , Ypos , Bcol)
Shift D , Right , 1
Next
Decr C
G = G + 1
Readeeprom B , G
Next
'Ypos = Ypos + 6
'Next
End Sub
jetzt habe ich wieder das problem, das der Text spiegelverkehrt angezeigt wird. ich habe versucht, werte zu ändern, aber es klappt nicht.
mfg Kay
Re: Hard SPI mit ATMEGA möglich ?
avrnix - 16.01.2007, 09:34
Hast du mal die Möglichkeit ein Foto zumachen ?
Das hat dann was mit der Darstellung zutun die muss qusi Rückwärts dargestellt werden!
Normalerweise hast du den 0,0 Links oben, durch 132-x und 176-y bzw 132-y und 176-x verschiebst du den Anfangspunkt der Darstellung. Im Prinzip kannst von oben nach unten , unten nach oben auf den Kopf etc. Einstellen.
Werde heute bzw. Morgen mal ausprobieren.
Am Wochenende musste ich meine alte Wohnung die Decke streichen, deswegen konnte ich es noch nicht ausprobieren, werde es aber diese Tage nachholen.
Wie ist die Gescwindigkeit der Darstellung, kann man auch den Ausdruck der Zeilen sehen oder gehts recht flott?
Hast du noch Vorschläge was noch gebraucht wird für die LIB, Punkte und Linien haben wir schon ? Wie Hoch ist die Speicherauslastung bei dir?
:P
Re: Hard SPI mit ATMEGA möglich ?
avrnix - 16.01.2007, 09:58
Kay hat folgendes geschrieben: hi dirk,
wie läuft denn Deine Prüfung ? haste bestanden ?
Bin bei den Prüfungsvorbereitung Ende des Monats bzw am Anfang sollte die erste LPI Prüfung kommen und 1-2 Wochen später die zweite LPI (101) Prüfung.
Danach kommen die MS Prüfungen zum MCSA.
Das heist dann 1x im Monat ist eine Prüfung angesagt
:?
Re: Hard SPI mit ATMEGA möglich ?
Kay - 16.01.2007, 12:04
hi,
also die geschwindigkeit ist komischerweise langsamer als bei Shiftout. Mag aber auch an der Programmierweise liegen. Da kann man bestimmt noch was rauskitzeln.
Folgendes könnte in einer Lib vorhanden sein:
- Cursorposition setzen
- Zeichen in Verschiedenen größen und Schriften darstellen
- Pixel setzen ( geht ja schon )
- Linien zeichnen ( geht ja auch schon )
- Bilder an beliebiger Position darstellen
- Boxen zeichnen
- Kreise zeichnen
mfg Kay
Re: Hard SPI mit ATMEGA möglich ?
avrnix - 16.01.2007, 13:01
Kay hat folgendes geschrieben: hi,
also die geschwindigkeit ist komischerweise langsamer als bei Shiftout. Mag aber auch an der Programmierweise liegen. Da kann man bestimmt noch was rauskitzeln.
Hallo Kay,
also wenns langsamer ist, obwohl ASM_Code eingefügt ist, hört sich nicht gerade berauschend an. Da beide Programme ähnlich aufgebaut sind. Sollte es ja ein Performance Gewinn geben, durch die ASM Routinen.
Vielleicht liegt es an der Einstellung am Hard-SPI (schneller einstellen) ?
Hast du mal die Test-Soucren von Christian Kranz benutzt ( in C ) um den Vergleich zu haben?
mfg
Re: Hard SPI mit ATMEGA möglich ?
Kay - 16.01.2007, 16:27
Hi Dirk,
hardspi schneller machen ? wie ? clockrate verstellen ? das bringt nichts. ich bekomme den C Source code von Christian nicht zum laufen.
mfg Kay
Re: Hard SPI mit ATMEGA möglich ?
avrnix - 16.01.2007, 17:38
Config Spi = Hard , Interrupt = On , Data Order = Msb , Master = Yes , Polarity = High , Phase = 1 , Clockrate = 4 , Noss = 1
Warum der Interrupt = on sein?
Was passiert den wenn der Clockrate gändert wird?
Bei dir müsste es ja bei ca 2MHz liegen. Also schön schnell sein
Da ich nicht der Hard SPI Experte bin frage ich dich mal.
Bascom HelpSyntax for hardware SPI
CONFIG SPI = HARD, DINTERRUPT=ON|OFF, ATA ORDER = LSB|MSB , MASTER = YES|NO , POLARITY = HIGH|LOW , PHASE = 0|1, CLOCKRATE = 4|16|64|128 , NOSS=1|0
Remarks
SPI
SOFT
for software emulation of SPI, this allows you to choose the PINS to use. Only works in master mode.
HARD for the internal SPI hardware, that will use fixed pins of the microprocessor.
DIN
Data input or MISO. Pin is the pin number to use such as PINB.0
DOUT
Data output or MOSI. Pin is the pin number to use such as PORTB.1
SS
Slave Select. Pin is the pin number to use such as PORTB.2
Use NONE when you do not want the SS signal to be generated. See remarks
CLOCK
Clock. Pin is the pin number to use such as PORTB.3
DATA ORDER
Selects if MSB or LSB is transferred first.
MASTER
Selects if the SPI is run in master or slave mode.
POLARITY
Select HIGH to make the CLOCK line high while the SPI is idle. LOW will make clock LOW while idle.
PHASE
Refer to a data sheet to learn about the different settings in combination with polarity.
CLOCKRATE
The clock rate selects the division of the of the oscillator frequency that serves as the SPI clock. So with 4 you will have a clockrate of 4.000000 / 4 = 1 MHz , when a 4 MHZ XTAL is used.
NOSS
1 or 0. Use 1 when you do not want the SS signal to be generated in master mode.
INTERRUPT
Specify ON or OFF. ON will enable the SPI interrupts to occur. While OFF disables SPI interrupts. ENABLE SPI and DISABLE SPI will accomplish the same. :shock:
Re: Hard SPI mit ATMEGA möglich ?
Kay - 16.01.2007, 21:05
egal ob interupt = on oder off, ändert sich nichts. Sobald ich die Clockrate höher mache, wirds wesentlich langsamer.
Für meine erste Anwendung mit dem S65 LCD reicht mir auch die Ansteuerung per Shiftout. Wäre nur gut, wenn wir so ne Art Library auf die Beine stellen könnten, für zukünftige Projekte.
mfg Kay
Re: Hard SPI mit ATMEGA möglich ?
avrnix - 17.01.2007, 09:22
Kay hat folgendes geschrieben: egal ob interupt = on oder off, ändert sich nichts. Sobald ich die Clockrate höher mache, wirds wesentlich langsamer.
Für meine erste Anwendung mit dem S65 LCD reicht mir auch die Ansteuerung per Shiftout. Wäre nur gut, wenn wir so ne Art Library auf die Beine stellen könnten, für zukünftige Projekte.
mfg Kay
Reicht das wenn - über SPIOUT (SOFT-SPI) - eine LIB geben wird ?
Ich wollte zumindest das man noch 1,2 Schriftgrössen einbauen.
Wie klappt das mit dem Bilder Laden mit dem Tool von Mike Bird, hast du da schon was programmiert?
Eine Lib im Sinne von BASCOM ( (lbx-Dateien)die sind ja im reinen Assembler ) kann es nicht geben. Eine LIB die man im Programm einbinden kann schon.
Include("S65.lib") z.B. -> Einbinden eines anderen Bascomprogrammes.
Also:
-Punkte
-Linien
-1xSchrift in 2-3 Grössen
-Rechteck
-Einfügen von Bildern
Die Schrift ist ja im EEPROM gespeichert, je nach grösse könnte man paar Sonderzeichen einbauen.
Klappen jetzt deine Buchstabendarstellung?
mfg[/b]
Re: Hard SPI mit ATMEGA möglich ?
Kay - 17.01.2007, 12:20
Soft SPI würde ja auch gehen. das mit den Bildern darstellen klappt sehr gut. Brauch dies für meine Tankanzeige. das mit der lib verstehe ich. ist ja aber auch kein problem. Konnte die Darstellung des Textes noch nicht probieren.
mfg Kay
Re: Hard SPI mit ATMEGA möglich ?
avrnix - 18.01.2007, 08:25
Kannste mal ein Beispiel hier posten wo ein Bild geladen wird, werde dann mal eine Routine in der Lib mit einbauen um Bilder einzubauen.
Machst du die Darstellung mit dem RLE oder im Raw Format.
mfg
Re: Hard SPI mit ATMEGA möglich ?
Kay - 18.01.2007, 16:22
hi,
also so lade ich das Bild:
Code:
Restore Bildname
Read X
Read Y
X = X - 1
Y = Y - 1
For Y1 = 0 To Y
For X1 = 0 To X
Read Z
Gosub Lcd_pset '(Subroutine setzt einen Pixel an X1,Y1 mit der Farbe Z)
Next X1
Next Y1
das bild wird unkomprimiert geladen. Aber Mikebird hatt den PictureConverter jetzt auch mit RLE Komprimierung ausgestattet. Habe es aber noch nicht probiert.
mfg Kay
Re: Hard SPI mit ATMEGA möglich ?
Kay - 21.01.2007, 14:46
hi,
noch eine Idee zur Lib :
- Positionieren des Textes "Pixel"genau
- Text horizontal oder Vertikel darstellbar
mfg Kay
Re: Hard SPI mit ATMEGA möglich ?
avrnix - 21.01.2007, 20:13
Kay hat folgendes geschrieben: hi,
noch eine Idee zur Lib :
- Positionieren des Textes "Pixel"genau
- Text horizontal oder Vertikel darstellbar
mfg Kay
Ja ist ne gute Idee - eine Ordination des Textes! :)
Bspl: s65_text( Ordination,x,y,col)
Ordination in Gradzahl also 0,90,180,360 Grad
ich weiss bloss nicht ob es eine Kombination möglich ist ( da der Bezugpunkt 0,0 immer woanders ist) oder als Standardwert zur Initisierung des Bezugpunkt für die Darstellung kommt.
Sonst brauche ich nur eine Init Bspl Grad=90 etc an den Anfank zusetzen.
Mal sehen wie ich das bewerkstelligen kann.
Das wird ein wenig Zeit brauchen, da ich mich auf die LPI Prüfung am vorbereiten bin.
mfg
Re: Hard SPI mit ATMEGA möglich ?
Kay - 22.01.2007, 13:23
was machen ja auch machen könnte:
Am Anfang des programms legt man fest, welchen Anzeigemodus man haben will. Also in der Init festlegen.
Wan hasten prüfung ?
Re: Hard SPI mit ATMEGA möglich ?
avrnix - 22.01.2007, 21:04
Kay hat folgendes geschrieben: .
Wan hasten prüfung ?
Am 29.01. :? bin fleißig am lernen , soll ja nicht so einfach sein ! :roll:
die 2. LPI Prüfung kommt dann - 2-3 Wochen später wen ich die erste Bestanden habe.
mfg
Re: Hard SPI mit ATMEGA möglich ?
Kay - 23.01.2007, 23:54
dann wünsch ich dir mal viel erfolg.
Haste danach vielleicht Zeit, mal ne vorab Library zu schreiben ? Mal zum testen.
mfg Kay
Re: Hard SPI mit ATMEGA möglich ?
avrnix - 24.01.2007, 08:42
Nein - Zeit habe ich im Moment nicht :( .
das werde ich erst machen wenn ich zeit habe, vielleicht nach der Prüfung für 1-2 Tage.
Die Prüfungen sind mir wichtiger, im Moment, werde mal sehen nach der Prüfung, das ich mal 1-2 Tage mich dran setze.
Hast du mal das HEX File ( Hard SPI ) auf deinen Controller ausprobiert?
:wink:
Re: Hard SPI mit ATMEGA möglich ?
Kay - 24.01.2007, 14:06
habe geschrieben:
Zitat: Haste danach vielleicht Zeit
will Dir auf keinen Fall stress machen. versteh mich bitte nicht falsch.
mfg Kay
PS: Habe den Code noch nicht probiert. werde ich am woende machen.
[/code]
Re: Hard SPI mit ATMEGA möglich ?
avrnix - 29.01.2007, 16:49
:D Die erste LPI Prüfung 101 ist bestanden :D die zeite kommt in 2.3 Wochen :(
Ich werde in den nächsten Tagen mal paar Sachen ausprobieren, vielleicht bekomme ich eine Vorversion von der LIB hin.
Hast du mal die HEX Datei ausprobiert die ich dir geschickt habe ( läuft per Hard SPI ) ? Und was ist schneller und um Wie viel male, als mit Soft bzw Hard SPI mit BASCOM-AVR ?
Re: Hard SPI mit ATMEGA möglich ?
Kay - 29.01.2007, 20:57
herzlichen glückwunsch Dirk.
ich habe versucht, die hex zu probieren. läuft aber nicht bei mir. keine Ahnung warum.
mfg Kay
Re: Hard SPI mit ATMEGA möglich ?
Kay - 30.01.2007, 11:50
habe mir nochmal die *.hex datei von Dir in meinen mega16 gebrannt. Es passiert nur eins: der Hintergrund färbt sich ein wenig rosa. Aber von der Geschwindigkeit her, kann ich keinen großen Unterschied zu Bascom mit HardSPI feststellen.
mfg Kay
Re: Hard SPI mit ATMEGA möglich ?
Kay - 01.02.2007, 19:25
hi,
wie machst Du die Pegelwandlung von 5V auf die 3V ? Ich benutze momentan noch Widerstände als Pegelwandler. Jetzt habe ich versucht nen 74hc4050 als wandler zu nehmen. nur tut sich da rein garnichts. Hast Du schonmal nen 4050 als pegelwandler probiert ?
mfg Kay
Re: Hard SPI mit ATMEGA möglich ?
avrnix - 01.02.2007, 20:42
Den habe ich noch nicht benutzt aber er sollte gehen!
Sonst geht es auch mit Widerständen und Dioden.
oder hier
http://home.arcor.de/dirk.milewski/media/Pegelwandlung.pdf
Unter Thema -> Links -> Pegelanpassung
Du weist auch das das Teil dann mit 2,9 V arbeiten soll, was auch gehen sollte? Was klappt denn da nicht?
Re: Hard SPI mit ATMEGA möglich ?
Kay - 01.02.2007, 20:57
wenn ich das mit den Widerständen mache, dann messe ich an den pins vom display 3,5V !!! ich besorg mir morgen mal nen anderes multimeter. ich denke, das ich da nen Messfehler mache. hab dir mal noch ne email geschickt.
mfg Kay
Re: Hard SPI mit ATMEGA möglich ?
avrnix - 01.02.2007, 21:55
Also dann stimmt der Spannungsteiler nicht ! Messe es nochmal nach.
Oder mache es mit ner Diode und Widerstand.
Re: Hard SPI mit ATMEGA möglich ?
Kay - 01.02.2007, 23:20
das mit dem Spannungsteiler mache ich genauso wie superkranz es auf seiner homepage beschreibt. es funktioniert ja aber damit einwandfrei. nur halt nicht mit dem 74HC4050.
Re: Hard SPI mit ATMEGA möglich ?
avrnix - 02.02.2007, 08:31
Wie hoch sind H-Pegel und L-Pegel beim HC4050?
Also ich arbeite auch mit dem Spannungsteiler , wie ich auf meiner HP gemacht habe und da kommt 2,8-3V ( unbelastet ) raus.
:shock: aber 3,5V ?
dann müssten ja die Eingänge auch einen Pegelwandler haben :!: :?:
Re: Hard SPI mit ATMEGA möglich ?
avrnix - 04.02.2007, 22:16
Du hast doch mal ein Tacho Bild in Sourcen gehat das wollte ich mal darstellen - ging nicht :( :
Call Cls_bottomtop(weiss)
Wait 1
Restore Tacho
Read X
Read Y
X = X - 1
Y = Y - 1
For Y1 = 0 To Y
For X1 = 0 To X
Read Z
Call Pset(x , Y , Z)
Next X1
Next Y1
Wait 2
Call Lcd_print_klein( "Total: 100254 km" , 1 , 2 , 1 , Schwarz , Weiss)
Call Lcd_print_klein( "Trip : 245 km" , 1 , 1 , 1 , Schwarz , Weiss)
End
außer die Schrift kommt kein Bild
:roll:
Was mache ich da falsch?
:?:
Re: Hard SPI mit ATMEGA möglich ?
avrnix - 06.02.2007, 08:24
:o Kann ja nicht klappen ich musste doch PSET(x1,y1,z) nehmen, dann klappt es auch !
Allerdings mit call Sub Routine und nicht mit Gosub!
:wink:
:roll:
Re: Hard SPI mit ATMEGA möglich ?
avrnix - 14.12.2007, 13:31
Thread geschlosen
hier gehts weiter:
http://www.weimars.net/forum/showthread.php?tid=28&pid=49#pid49
Mit folgendem Code, können Sie den Beitrag ganz bequem auf ihrer Homepage verlinken
Weitere Beiträge aus dem Forum www.comwebnet.de
Teileliste? - gepostet von blitzer7630 am Freitag 13.04.2007
COM2TCP für Windows - gepostet von avrnix am Samstag 03.03.2007
Controller retten - gepostet von Wigbert am Mittwoch 20.06.2007
Oszilloskop mit s65 - gepostet von Wigbert am Mittwoch 23.05.2007
New Project will born - Steuerung mit dem Browser und AVR - gepostet von avrnix am Samstag 09.06.2007
Ähnliche Beiträge wie "Hard SPI mit ATMEGA möglich ?"
hard fucking lol - -[NBP]--Skizzy- (Dienstag 28.06.2005)
Hard-Core Case-Mod - Domitian (Donnerstag 08.06.2006)
3.09.05 HARD BEATS Vol.2 @ InTime [Ottenfels & Kfog] - Funatic (Montag 13.06.2005)
Tipps für gute Hard- und Software - KageJubei (Dienstag 13.03.2007)
The Hard Gamers!!! - aggros (Freitag 07.07.2006)
TNA Hard Justice 2006 - AJ Styles (Dienstag 01.08.2006)
55hp solo uw auf hard mode!! - Del (Montag 23.04.2007)
Lordi - hard rock hallelujah - Deutschi (Freitag 18.08.2006)
Hard-Rock Clan - shadow (Freitag 06.10.2006)
Samstag Kicken? - Squall_F (Mittwoch 24.08.2011)