Suche eine Library für das DOGM Display. Ich habe hier schon einige Beiträge gefunden die auch Librarys beinhalten aber ich habe keine möglichkeit das Display über Hardware SPI anzusteuern. Gibt es eine Soft SPI Library für die Displays? SPI brauche ich schon für mein Ethernet...... Danke
> aber ich habe keine > möglichkeit das Display über Hardware SPI anzusteuern. SPI in Software ist jetzt aber nicht gerade Raketentechnik. Alle Bits eines Bytes nacheinander auf einen Portpin legen und bei jedem Bit einem mal dem Clockpin wackeln.
Ja aber wie soll ich das sonst machen wenn ich kein HArdware SPI mehr zur verfügung habe?
Welchen Teil der Wortkombination "Software SPI" verstehst du nicht. In Software! Du wirst doch wohl geordnet mit 2 Pins in der richtigen Reihenfolge wackeln können! Mehr ist SPI nicht. In dem einen Fall macht das die Hardware und in deinem Fall schreibst du eben eine Funktion, die in gleicher Weise mit den Pins wackelt.
Hi >Ja aber wie soll ich das sonst machen wenn ich kein HArdware SPI mehr >zur verfügung habe? Bei einigen AVRs gibt es auch 'USART im SPI-Mode'. MfG Spess
Karl Heinz Buchegger schrieb: > Welchen Teil der Wortkombination "Software SPI" verstehst du nicht. > > In Software! Du wirst doch wohl geordnet mit 2 Pins in der richtigen > Reihenfolge wackeln können! Mehr ist SPI nicht. In dem einen Fall macht > das die Hardware und in deinem Fall schreibst du eben eine Funktion, die > in gleicher Weise mit den Pins wackelt. Sorry aber ich habe da scheinbar nicht soviel Ahnung wie du. Ich habe leider keine Ahnung im C programmieren und verstehe nicht was du meinst mit rumwackeln.
je nach dem wie die Auflösung des Displays ist empfiehlt es sich schon HW-SPI zu nehmen da sich sonst das Bild möglicherweise zu langsam aufbaut. ps: bei einigen Controllern wird gar nicht zwischen spi, uart, usart oder i2c unterschieden...z.B. den EFM32
spess53 schrieb: > Hi > >>Ja aber wie soll ich das sonst machen wenn ich kein HArdware SPI mehr >>zur verfügung habe? > > Bei einigen AVRs gibt es auch 'USART im SPI-Mode'. > > MfG Spess Ich nutze einen Mega1284P. Habe folgendermaßen angeschlossen: RST PB3 A0 PB2 SCL PA0 SI PA1 CS PB4 Kann ich da was mit USART machen?
Benjamin F. schrieb: > je nach dem wie die Auflösung des Displays ist empfiehlt es sich schon > HW-SPI zu nehmen da sich sonst das Bild möglicherweise zu langsam > aufbaut. > > ps: bei einigen Controllern wird gar nicht zwischen spi, uart, usart > oder i2c unterschieden...z.B. den EFM32 Aber was soll ich den machen wenn ich kein SPI habe. Das mein Ethernet schnell und zuverlässiger ist ist VIEL wichtiger.
Hallo, wenn du noch eine I2C-Schnittstelle frei hast: DOGXL160, ist mit 400 Khz noch ausreichend schnell. http://www.basteln-mit-avr.de/atxmega32a4.html Gruß xmega
André R. schrieb: > Suche eine Library für das DOGM Display. André R. schrieb: > Ich habe > leider keine Ahnung im C programmieren und verstehe nicht was du meinst > mit rumwackeln. Ja, dann ist natürlich alles klar. Ich schreibe für dich alles fix und fertig, du brauchst nur noch auf das eigens für dich programmieren GUI-Button zu drücken und schon macht die Hardware das was du von ihm willst. Kein Problem, darf ich ergebenst sonst noch etwas für dich tun?
André R. schrieb: > Sorry aber ich habe da scheinbar nicht soviel Ahnung wie du. Ich habe > leider keine Ahnung im C programmieren und verstehe nicht was du meinst > mit rumwackeln. Und dann willst du ein Gerät mit Ethernet bauen? kopfschüttel
Floh schrieb: > André R. schrieb: >> Sorry aber ich habe da scheinbar nicht soviel Ahnung wie du. Ich habe >> leider keine Ahnung im C programmieren und verstehe nicht was du meinst >> mit rumwackeln. > > Und dann willst du ein Gerät mit Ethernet bauen? > *kopfschüttel* Ethernet funktioniert einwandfrei.
André R. schrieb: > Floh schrieb: >> André R. schrieb: >>> Sorry aber ich habe da scheinbar nicht soviel Ahnung wie du. Ich habe >>> leider keine Ahnung im C programmieren und verstehe nicht was du meinst >>> mit rumwackeln. >> >> Und dann willst du ein Gerät mit Ethernet bauen? >> *kopfschüttel* > > Ethernet funktioniert einwandfrei. Aber nicht weil du es gemacht hast. Anderer Leute Loorbeeren einheimsen ist immer einfach. Die halbe Managerbrut lebt davon.
André R. schrieb: > Ethernet funktioniert einwandfrei. :-) Typen wie du sind die Gründe, weshalb ich mittlerweile nichts mehr open source mache. Null Ahnung von der Materie, auch kein Bock sich einzuarbeiten aber trotzdem kostenlose Hilfe einfordern, weil man sich selber zu schade ist Energie zu investieren. Armselig...
André R. schrieb: > Sorry aber ich habe da scheinbar nicht soviel Ahnung wie du. Wie funktioniert denn SPI? Das Byte 0b10010011 soll per SPI ausgegeben werden. Dazu gibt es 2 Leitungen (eigentlich 3, aber die 3. ist nur die Freigabe für das Gerät): MOSI und SCK Hier ist das Byte 0b10010011 | +-----> Das Bit wird auf den MOSI Pin gelegt: der Pin muss also auf 1 gestellt werden. Dann macht der SCK Pin einmal 0->1 und wieder zurück 1->0 | +------> Dann kommt das nächste Bit. Ist wieder 1. Also muss MOSI wieder auf 1 gelegt werden Und wieder macht der SCK Pin: 0->1, 1->0 | +-------> Das nächste Bit. Diesmal eine 0 Also muss der MOSI Pin auf 0 gezogen werden Und wieder machr der SCK Pin: 0->1, 1->0 usw. usw. bis alle 8 Bits durch sind. Und das wars dann auch schon. Damit ist das Byte draussen. Ob du die Bits von Rechts nach Links oder von Links nach Rechts abarbeiten musst, und ob der SCK 0->1->0 oder 1->0->1 machen muss, verrät dir das Datenblatt zum Display. Das ist doch eine Standardaufgabe für jeden angehenden µC Programmierer: Bits extrahieren und Ausgabepins gezielt auf 0 oder 1 zu setzen, bzw. mit einem Pin (SCK) einmal 'wackeln'.
War ja nur eine Frage, wurde gebeten einem Kollegen das Ding zum Laufen zu bringen. Hab ich sonst hier im Forum noch nicht erlebt das so unfreundlich auf eine kurze Frage reagiert wird. Habe nicht gesagt das jemand etwas programmieren soll oder sonstwas. Habe wenn ihr lesen könntet oben nur gefragt ob jemand schon eine SOFTSPI Library hat oder es eine gibt. Ihr seid halt im Programmieren toll, andere sind da noch ganz am Anfang, ihr seid mit dem Wissen auf die Welt gekommen, andere müssen sich das ganze erst erarbeiten. Leider habe ich erst vor wenigen Wochen angefangen mich damit zu beschäftigen ich studiere und arbeite nebenbei und deshalb kann ich da nicht sofort voll durchblicken. Aber ich dachte so läuft das hier... Jeder hilft jedem vielleicht habt ihr ja auch irgendwann mal eine Frage zu einem anderen Fachbereich....
Stefan schrieb: > André R. schrieb: >> Ethernet funktioniert einwandfrei. > > :-) Typen wie du sind die Gründe, weshalb ich mittlerweile nichts mehr > open source mache. Null Ahnung von der Materie, auch kein Bock sich > einzuarbeiten aber trotzdem kostenlose Hilfe einfordern, weil man sich > selber zu schade ist Energie zu investieren. Armselig... Meine Projekte sind weiterhin Open Source auch wenn es keine uC Projekte sind. Das ganze System funktioniert nunmal so. Und das mit dem kein bock zur einarbeitung ist eine Unterstellung. Es ist einfach die Zeit die fehlt und die erfahrung.
André R. schrieb: > War ja nur eine Frage, wurde gebeten einem Kollegen das Ding zum Laufen > zu bringen. Hab ich sonst hier im Forum noch nicht erlebt das so > unfreundlich auf eine kurze Frage reagiert wird. Es geht um die Art der Frage und deren Schwierigkeitsgrad. Der Schwierigkeitsgrad in einer Software-SPI ist lächerlich gering. > Ihr seid halt im Programmieren toll, andere sind da noch ganz am Anfang, > ihr seid mit dem Wissen auf die Welt gekommen, Oh, nein. Auch wir mussten uns das alles erarbeiten. Und soll ich dir was sagen: Als ich angefangen habe, gab es noch kein Internet. Was dir heute ein paar Stunden Online-Recherche kostet, kostete uns Tage oder Wochen. Und wir mussten (was wir nicht in Büchern fanden) uns die Dinge selbst beibringen. Wir hatten niemanden in einem Forum, der mal kurz mit einer Erklärung aushalf. Oft genug hat ein Problem geheißen: Nächtelang Handbücher und Manuals zu studieren, ein Testprogramm nach dem anderen zu schreiben nur um festzustellen, dass es so nicht geht und irgendetwas übersehen wurde - was uns dann gleich wieder an den Schreibtisch zurückbrachte um erneut Manualstudium zu betreiben. Also komm mir bloss nicht mit: "Ich bin ja nicht mit diesem Wissen zur Welt gekommen". Da werd ich nämlich sauer. > Aber ich dachte so läuft das hier... Jeder hilft jedem vielleicht habt > ihr ja auch irgendwann mal eine Frage zu einem anderen Fachbereich.... So läuft das auch. Aber von einem Frager wird auch erwartet, dass er selbst was dazu beiträgt. Wenn du Hotel Mama suchst, bist du hier falsch.
wie wärs mit multiplexen? ethernetcontroller mit cs auswählen und schreiben oder display mit cs auswählen ?!? SPI is doch Master/slave verfahren ein master mehrere slaves ...
Einmal gegooglet, ca 30s: http://avr.myluna.de/doku.php?id=de:dogm-class Geht scheinbar über Soft-Spi mit 25 fps. Ein wenig Zeit und man kann diese Lösung sicher auch nach C oder einer anderen Sprache überführen. Helmut
Das habe ich vorhin auch schon gefunden. Vielen Dank für den Hinweis und den Link. Danke
André R. schrieb: > Benjamin F. schrieb: >> je nach dem wie die Auflösung des Displays ist empfiehlt es sich schon >> HW-SPI zu nehmen da sich sonst das Bild möglicherweise zu langsam >> aufbaut. >> >> ps: bei einigen Controllern wird gar nicht zwischen spi, uart, usart >> oder i2c unterschieden...z.B. den EFM32 > > Aber was soll ich den machen wenn ich kein SPI habe. Das mein Ethernet > schnell und zuverlässiger ist ist VIEL wichtiger. Also ich kenne mich mit Ethernet nicht aus aber laut Atmel-Website hat der Mega1284P 3x SPI, brauch man die alle für Ethernet? Ansonsten wie schon gesagt I²C Display besorgen, oder eins parallel anschließen wenn du noch genug Pins hast.
Bei mir steht nichts von 3xSPI. Hab auch nochmal nachgeschaut da ist nur die Rede von einem SPi serial Port.
Hi >Bei mir steht nichts von 3xSPI. Hab auch nochmal nachgeschaut da ist nur >die Rede von einem SPi serial Port. Hat er aber -> 1xSPI und 2x UART im SPI-Mode. MfG Spess
André R. schrieb: > Bei mir steht nichts von 3xSPI. Hab auch nochmal nachgeschaut da ist nur > die Rede von einem SPi serial Port. Ohne jetzt bösartig zu sein, aber eine Frage habe ich dann doch noch: du studierst doch hoffentlich keine E-Technik sondern Informatik, oder? Das würde sich dann mit meinen Erfahrungswerten decken. Lieber nach einer Lib fragen als selber zu schreiben, Datenblätter nicht lesen können, sich auf zu wenig Zeit berufen, etc. Wie gesagt, nicht böse gemeint, denn soetwas wird in den letzten Jahrzehnten anscheinend von den Unis "anerzogen".
Gerade SPI bietet einem doch über die Chip-Select-Leitung die Möglichkeit, die SCK, MOSI und MISO-Leitungen an mehrere Geräte zu legen und den Master dann den gewünschten Chip über die zugehörige Select-Leitung zu selektieren. Sollte deutlich einfacher sein, als ein SoftwareSPI (für den TE zumindest).
André R. schrieb: > Als Maschinenbauer habe ich mit solchen Dingen halt kaum Kontakt... Na klar, und ich habe Philosophie und Sozialwissenschaften studiert :-)
>Gerade SPI bietet einem doch über die Chip-Select-Leitung die >Möglichkeit, die SCK, MOSI und MISO-Leitungen an mehrere Geräte zu legen >und den Master dann den gewünschten Chip über die zugehörige >Select-Leitung zu selektieren. Genau. Ich habe gerade ne Schaltung am laufen wo eine SD-Karte, ein VS1001 und ein DOGM Display an einem SPI laufen. Das ist gar kein Problem. Beim abspielen von MP3 Dateien von der SD hört man nicht mal den kleinsten Knackser wenn das Display komplett neu beschrieben wird. Das Displayupdate dauert bei 8MHz SPI Takt etwas mehr als eine Millisekunde. Das Display wird nur alle 250ms neu beschrieben. Ich hätte wohl auch kein Problem da noch einen ENC28J60 für eine Ethernetverbindung dran zu pappen. Und eine Schaltung mit nur einem ENC28J60 hätte wohl kaum ein Problem wenn man für ein Display die Verbindung mal für ein paar Millisekunden unterbricht.
Also, ich bin schon nen Stück weiter. Habe das auf SoftSPI umgeschrieben und hoffe das es soweit richtig ist. Das Problem was ich habe ist allerdings, dass sich mein Sensor komplett aufhängt wenn ich irgendwas mit dem Display mache. Die Init läuft er durch aber zeigt nichts an. Wenn ich dann nen clear display mache stürzt er ab. Habe mit Debugausgaben versucht die Lösung zu finden aber finde sie einfach nicht. Er durchläuft laut meinen Debugausgaben über uart ohne Probleme den ganzen clear prozess und reinigt angeblich jeden Pixel genau wie er es soll vom programmablauf. nachdem er fertig ist und das clear display fertig ist geht garnichts mehr. Ich kann keinerlei eingaben mehr über UART machen.... Ich habe mal das was ich umgeschrieben habe unten drangehangen. Vielleicht fällt irgendjemandem auf die schnelle etwas ein. Wird vermutlich etwas triviales sein. Den Timer habe ich auskommentiert, da ich die PWM Dimmmethode nicht brauche. Ist der Timer evtl wichtig für andere anwendungen beim radig display? Habe versucht das ganze selbsterklärend zu schreiben aber wie oben bereits beschrieben ich bin schlecht im programmieren. DANKE
1 | void display_init() |
2 | {
|
3 | //Set TIMER0 (PWM OC2 Pin)
|
4 | //BRIGHTNESS_PWM_DDR |= (1<<BRIGHTNESS_PWM_PIN);//PWM PORT auf Ausgang (OC2)
|
5 | //TCCR2 |= (1<<WGM21|1<<WGM20|1<<COM21|1<<CS20);
|
6 | //OCR2 = 50;
|
7 | //set outputs AO und RESET
|
8 | DDR_A0 |= (1<<DISPLAY_A0); |
9 | DDR_RST |= (1<<PIN_RST); |
10 | |
11 | //Set SPI PORT
|
12 | DDRB |= (1<<DISPLAY_CLK)|(1<<DISPLAY_SDO)|(1<<DISPLAY_CS); |
13 | PORTB |= (1<<DISPLAY_CS); |
14 | |
15 | //Reset the Display Controller
|
16 | PORT_RST &= ~(1<<PIN_RST); |
17 | PORT_RST |= (1<<PIN_RST); |
18 | asm("nop"); |
19 | |
20 | //sent 11 init commands to Display
|
21 | for (unsigned char tmp = 0;tmp < 11;tmp++) |
22 | {
|
23 | display_write_byte(CMD,DISPLAY_INIT[tmp]); |
24 | }
|
25 | display_clear(); |
26 | |
27 | return; |
28 | }
|
29 | #############################################################
|
30 | #############################################################
|
31 | |
32 | |
33 | void display_write_byte(unsigned cmd_data, unsigned char data) |
34 | {
|
35 | DISPLAY_CSPORT &= ~(1<<DISPLAY_CS); |
36 | if(cmd_data == 0){DISPLAY_A0PORT |= (1<<DISPLAY_A0);} |
37 | else{DISPLAY_A0PORT &= ~(1<<DISPLAY_A0);} |
38 | |
39 | for (int i=0;i<8;i++){ |
40 | if (data&0x80) DISPLAY_SDOPORT|=(1<<DISPLAY_SDO); |
41 | else DISPLAY_SDOPORT &=~(1<<DISPLAY_SDO); |
42 | _delay_us(20); |
43 | DISPLAY_CLKPORT&=~(1<<DISPLAY_CLK); |
44 | data<<=1; |
45 | _delay_us(20); |
46 | DISPLAY_CLKPORT|=(1<<DISPLAY_CLK); |
47 | //_delay_us(100);
|
48 | }
|
49 | DISPLAY_CSPORT |= (1<<DISPLAY_CS); |
50 | }
|
51 | #############################################################
|
52 | #############################################################
|
53 | |
54 | void display_clear(){ |
55 | unsigned char page, col; |
56 | |
57 | for(page=0;page<8;page++){ |
58 | display_go_to(1,page); |
59 | |
60 | for (col=0;col<132;col++){ |
61 | display_write_byte(0,0x00); |
62 | }
|
63 | }
|
64 | }
|
André R. schrieb: > Den Timer habe ich auskommentiert, da > ich die PWM Dimmmethode nicht brauche. Ist der Timer evtl wichtig für > andere anwendungen beim radig display? benötigt
1 | _delay_us(20); |
vielleicht den Timer?
Ne eigtl nicht, die _delay_us kommt aus der util/delay.h und ist ein aktives Warten wird kein Timer für benutzt.
So, alles läuft, problem war, dass ich ein Datenrichtungsregister falsch gesetzt hatte. Die korrigierte Version für alle die es interressiert und kein Hardware SPI benutzen wollen hier nochmal die beiden funktionen die ihr ändern müsst. Das Display läuft zumindest vom Gefühl ohne Geschwindigkeitsunterschied zum SPI obwohl der Webserver und nen ganzer anderer Haufen wie mehrere 24Bit AD Wandlungen etc auch ständig und ohne Pause durchlaufen. Kein Flackern Text ist sofort auf dem Bild.
1 | void display_write_byte(unsigned cmd_data, unsigned char data) |
2 | {
|
3 | //uart_puts("2");
|
4 | DISPLAY_CSPORT &= ~(1<<DISPLAY_CS); |
5 | if(cmd_data == 0){DISPLAY_A0PORT |= (1<<DISPLAY_A0);} |
6 | else{DISPLAY_A0PORT &= ~(1<<DISPLAY_A0);} |
7 | |
8 | for (int i=0;i<8;i++){ |
9 | if (data&0x80) DISPLAY_SDOPORT|=(1<<DISPLAY_SDO); |
10 | else DISPLAY_SDOPORT &=~(1<<DISPLAY_SDO); |
11 | _delay_us(20); |
12 | DISPLAY_CLKPORT&=~(1<<DISPLAY_CLK); |
13 | data<<=1; |
14 | _delay_us(20); |
15 | DISPLAY_CLKPORT|=(1<<DISPLAY_CLK); |
16 | _delay_us(100); |
17 | }
|
18 | DISPLAY_CSPORT |= (1<<DISPLAY_CS); |
19 | }
|
20 | |
21 | void display_init() |
22 | {
|
23 | |
24 | DDR_A0 |= (1<<DISPLAY_A0); |
25 | DDR_RST |= (1<<PIN_RST); |
26 | DDR_CS |= (1<<DISPLAY_CS); |
27 | DDR_SDO |= (1<<DISPLAY_SDO); |
28 | DDR_CLK |= (1<<DISPLAY_CLK); |
29 | DISPLAY_CSPORT |= (1<<DISPLAY_CS); |
30 | PORT_RST &= ~(1<<PIN_RST); |
31 | _delay_us(100); |
32 | PORT_RST |= (1<<PIN_RST); |
33 | asm("nop"); |
34 | |
35 | for (unsigned char tmp = 0;tmp < 10;tmp++) |
36 | {
|
37 | display_write_byte(CMD,DISPLAY_INIT[tmp]); |
38 | }
|
39 | display_clear(); |
40 | return; |
41 | }
|
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.