Hard SPI mit ATMEGA möglich ?

www.comwebnet.de
Verfügbare Informationen zu "Hard SPI mit ATMEGA möglich ?"

  • Qualität des Beitrags: 0 Sterne
  • 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:29

    Hard 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)