Sida 1 av 1
SPI DOGM163 och ATmega16
Postat: 5 mars 2007, 10:33:14
av port513
Har fått hem min DOGM163 display och ska koppla den enligt +5V SPI interface.
Lite funderingar där då all exempelkod jag hittat är enligt 4bits eller 8bits. Är det någon som kört denna via SPI som har lite tips och tricks att dela med sig av?
Det jag har att tillgå är:
STK500
ATmega16
Breadboard (modell Parallax Large)
DOGM163
Kopplingskapblar
+ diverse motstånd med mera
Tacksam för lite knuffar i rätt riktning.
/Henke
Postat: 6 mars 2007, 01:19:16
av Stinrew
Jodå, det är lätt(iaf när man jobbat med det förut

). Jag gissar att du köpt displayen av Lawicel. Titta på deras datablad för
kontrollern. På sidan 47 i pdf-en finns det du söker. "Intel 8051 Serial" ersätts av din "AVR ATmega16".
Det enda som skiljer ditt program ifrån programexemplena i databladen är just det att all data skickas seriellt via 1 tråd istället för parallellt i 4/8 trådar. Vad du är skickar(kommandon eller data) så är det byte-vis(8 bitar åt gången) som gäller. När man skriver en byte till displayen i parallellt 8b-format gör man så att man sätter Read/Write(R/W), Register Select(RS), Chip Select(CSB), byten på DB0-DB7, och sedan kör man enable sekvensen.
I ditt fall ska all data(byten) skickas seriellt över en tråd. Chip Select(CSB) och Serial Clock(SCL) ska deafult vara höga, så innan och efter varje dataöverföring ska dom lämnas höga. En överföringssekvens bör se ut ungefär så här:
Först sätter du RS-biten hög eller låg beroende på om du ska skriva ett kommando eller data(tecken). Sedan drar du CSB låg, detta aktiverar 8b-shiftregistret som läser in byten i displayen. Sätt Serial Input(SI) till första biten(den högsta först bit7->bit0), alltså först bit7 i byten som ska överföras. sätt SCL låg och håll den låg i minst 120ns. sedan sätter du SCL hög i minst 20ns. shiftregistret läser på stigande flank hos SCL. Nu sätter du SI till bit6 och upprepar sekvensen med SCL låg minst 120ns och sedan hög i minst 20ns. Osv. ner till bit 0 med efterföljande SCL låg-hög sekvens. när detta är gjort sätter du CSB hög, vilket får kontrollern i displayen att behandla den överförda byten(som data eller kommando).
När du har skrivit funktioner för att kunna överföra kommando/data är det bara att köra på med att få igång displayen enligt vanlig 8b-initiering. Givetvis har jag färdig kod för detta också, men jag gissar att du vill försöka själv först.
Lycka till!!!
Postat: 6 mars 2007, 06:08:37
av port513
Tjena!
Den är köpt där ja och jag har printat den manualen
Tackar för tipsen, och självklart vill jag göra alla grodor själv först
*** EDIT ***
Hur kortsluter jag bäst de pinnar som inte ska användas när jag kör SPI? Sätta jumpers kommer se ut som ett ormbo

*** SLUT EDIT ***
/Henke
Postat: 6 mars 2007, 10:27:42
av Stinrew
Nu är jag osäker på hur jag ska tolka frågan om kortslutning av oanvända pinnar. Dom pinnarna som inte används i SPI-läget(D0-D5, E och R/W) ska alla anslutas till VDD(matningsspänningen), se
datablad sidan 4. När man kopplar på kopplingsdäck brukar man bara ta och skala massa små kabelbitar som kopplar ihop pinnarna med varandra och till slut en kabel som kopplar allt till VDD. Att det se'n ser ut som en fläta eller så får man leva med

. Vet inte om detta besvarat din fråga?!
Postat: 6 mars 2007, 13:05:21
av port513
Det var väl i princip det jag menade
Kortsluta var väl lite fel ord men du förstod ju
/Henke
Postat: 7 mars 2007, 19:50:54
av port513
Nu kan jag nog kapitulera, jag har kopplat på alla miljoner sätt jag kan, proggat på alla sätt som alla PDF:er säger utan att ens få en reaktion från displayen.
Så nu tar jag tacksamt emot ett progg för SPI för ATmega16
Jag har kopplat min LCD enligt följande:
LCD PIN
21 Inget
22 Inget
23 GND
24 +5
25 +5
26 +5
27 GND
28 PB5 (på ATmega16)
29 PB7 (på ATmega16)
30 +5
31 +5
32 +5
33 +5
34 +5
35 +5
36 +5
37 +5
38 PB6 (på ATmega16)
39 PB4 (på ATmega16)
40 +5
Är detta rätt när man kör SPI som jag tänkt göra?
/Henke
Postat: 8 mars 2007, 13:02:39
av Stinrew
main.hex
Här har du en fungerande fil enligt dina specifikationer, lycka till!
Postat: 8 mars 2007, 14:21:58
av port513
Jag la frågan på AVRFreaks också och där påpekade någon att jag råkat ta en input till CSB. Kommer det kludda till det?
Tackar för filen, kommer testa med befintlig setup och se om det funktionerar
Återrapporterar senare under dagen.
/Henke
Postat: 8 mars 2007, 16:59:52
av Stinrew
Alltså, .hex-filen förutsätter att du kör med 3.686MHz extern kristall och 5V VTG. Vad Martin på AVRFreaks menar med det är att han tror att du använder AVRens fördefinierade SPI-interface. Vad jag beskrev för dig är hur du skriver ditt egna interface, med dom I/O-pinnar som du själv väljer. Om du visar din kod kanske jag eller någon annan här på forumet kan guida dig till ett fungerande resultat.
Postat: 8 mars 2007, 20:12:06
av port513
Saken är den att det är meningslöst att sitta och koda om jag har kopplingen fel, eller hur?
Som att sitta och försöka få en haj på metspö i badkaret hemma.
Jag kör med 16MHz kristall bland annat så då kommer inte din hex att fungera
Men hur som helst, hur SKA min koppling se ut om jag har det som det SKA vara? Måste ju börja med en korrekt koppling innan jag kan börja koda.
Kod: Markera allt
; Ställer MOSI, RS och CLK som output
ldi r16, (1<<PB7)|(1<<PB5)|(1<<PB4)
out DDRB, r16
; Startar SPI som master
ldi r16, (1<<SPE)|(1<<MSTR)|(1<<SPR0)
out SPCR, r16
/Henke
Postat: 8 mars 2007, 21:16:45
av Stinrew
Men du har ju en STK500, använd den programmerbara oscillatorn och sätt den till 3,686MHz. Koppla in displayen till AVRen med kablar. Låt AVRen sitta i STK500-brädan. Du kan ju med fördel låta STK500an strömförsörja displayen.
Är det där ASM???
Postat: 8 mars 2007, 21:19:22
av port513
Problemet här är att jag har nått vajsigt med den där mjukvaru saken. Den dödar min programmering direkt...
/Henke
Postat: 8 mars 2007, 23:40:45
av port513
Problemet nu är att problemet är löst
Som jag sagt tidigare så har jag lyckats missa att jag kopplat MISO till CSB och i master är MISO alltid INPUT. Jag flyttade CSB till PB3 istället och nu fungerar det som det ska (tror jag iaf)
Jag får text på displayen men svenska tecken är fortfarande knas men det är säkert lättfixat.
/Henke med en fungerande DOGM163W-A
