Hallo Leute.
Ich versuche ein Siemens S65-GLCD anzusteuern. Dies geschieht mit Hardware SPI. Um die Geschwindigkeit zu testen habe ich einfach mal die CLS-Routine die beim Display dabei war (Display3000) umgeschrieben.
Die INitialisierung des SPI schaut so aus.
Das Display hat eine Auflösung von 132x176 Pixeln Je Pixel braucht es 2 Byte für die Darstellung, womit man 46464 Bytes zum Löschen des Bildschirms übertragen muss. Ich habe, damit es schneller geht ein ByteArray mit 128byte Länge definiert und dieses mit 255 gefüllt. Dann wird das Ganze per SPIOUT 363 mal an das Display gesendet. Das mache ich 100 mal und messe die Zeit die dafür benötigt wird. Es dauert 19 Sekunden. Das bedeutet, daß pro Bildschirmlöschen 0,19 Sekunden benötigt werden. Mein Controller (Atmega2561) arbeitet mit einer externen Takfrequenz von 14,745600 MHz.Code:Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 4 , Noss = 1 Spiinit 'Initializing of the SPI interface Set Spsr.spi2x 'hidden parameter: doubles the speed of the SPI output
Laut CONFIG SPI sollte der SPI-Takt dann mit 1/4 Teilung und Speedverdopplung 7,372800 MHz betragen. Rechne ich aber die CLS Geschwindigkeit (46464 Bytes in 0,19 sek =371712 bits in 0,19sek = 1956378 Bits /sek)um, sokomme ich auf einen effektiven SPITakt von 1,956378MHz. Wo geht die Geschwindigkeit verloren? Ist Bascom da so ineffektiv?
Die CLS Rountine schaut so aus und wird 100 mal hintereinander mit Call aufgerufen
Die "Gosub Window" routine schickt nur 8 Byte mit der Bereichsdeinition per SPI an das Display, sollte also nicht die Bremse sein.Code:Sub Lcd_cls 'Clears the screen - basically just writes 132x176x2=46464 times a color value into a full frame box Local Or_old As Byte , Lcd_h As Word Or_old = Orientation 'save orientation so we always clear screen in portrait mode Orientation = Portrait Lcd_x1 = 0 Lcd_y1 = 0 Lcd_x2 = 131 Lcd_y2 = 175 Gosub Window For Lcd_h = 1 To 128 'Array Füllen 255= Weiss Bigarray(lcd_h) = 255 Next Lcd_h 'set up an array with 128 Byte , So These 128 Bytes Can Be Faster Transmitted = Quicker Cls ; More Bytes Would Speed It Up Even More For Lcd_h = 1 To 363 '132x176 pixel x 2 byte = 46464 byte needs to be transmitted = 363 x 128 bytes from the array Spiout Bigarray(1) , 128 Next Lcd_h Set Lcd_port.lcd_cs Reset Lcd_port.lcd_cs Orientation = Or_old 'set back orientation to the former state End Sub







Zitieren


Lesezeichen