mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik SPI an ATMEGA16 in ASM


Autor: Sven B. (svenba)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!
Ich weiss, es gibt schon 1000 Thread mit diesem Thema.
Ich habe mir wahrscheinlich jeden schon zwei Mal durch gelesen und 
ändere schon seit drei Tagen an meinem Programm rum aber ICH KRIEG ES 
NICHT HIN!!

Ich bitte um Hilfe!!
Ich will ein EA DOGM132-5 Display an einem ATMega16 über SPI in ASM 
ansteuern.
SPI_INIT:
        push temp1
        ldi temp1, (0<<SPI2X)
        out spsr, temp1

        ldi temp1, 0xFF    ; Output = SCK, MOSI,... (ALLES!!!)
        out DDRB, temp1

    ldi temp1, (0<<SPIE)|(1<<SPE)|(0<<DORD)|(1<<MSTR)|(0<<CPOL)|(0<<CPHA)|(0<<SPR1)|(0<<SPR0)
    
                                
        out SPCR, temp1
        out SPDR,temp1            ; Dummy Daten, um SPIF zu setzen

        pop temp1
        ret

; ---------------------- per SPI senden ------------------

Kommando_per_SPI:            ; in disdata1 stehen die Daten
        push temp1
        push disdata1          ; DENKE DRAN: CS,A0 setzen/löschen
      

        cbi PORTD, CS
        cbi PORTD, A0
      ;  sbi PORTD, LCD_RESET
        ldi temp1, (1<<MSTR)
        out SPCR, TEMP1

        
        out SPDR, disdata1

warte_SPI:  ;  in temp1, SPSR
        sbis SPSR, SPIF      ; solange, bis Interrupt aus!!
        
        rjmp warte_SPI
;        rcall warte_1ms
        

        in temp1, spdr
        
      

        pop disdata1
        pop temp1
        
        ret


;===============================================================================

Daten_per_SPI:
        push disdata1
        push temp1
        
        cbi PORTD, CS
        sbi PORTD, A0
  ;      sbi PORTD, LCD_RESET

        ldi temp1, (1<<MSTR)
        out SPCR, TEMP1
        
        
        
        out SPDR, disdata1

warte_SPI2:  ;  in temp1, SPSR
        sbis SPSR, SPIF      ; solange, bis Interrupt aus!!
        rjmp warte_SPI2

        
        in temp1, spdr
      ;  cbi PORTD, A0
        

;        rcall warte_1ms        
        pop temp1
        pop disdata1
        
        ret

Könnt ihr mir sagen, was da falsch läuft ???
Hardware hab ich schon 8 Milliarden mal durch gepiept.
Habe schon versucht das Display beim programmieren des ATMega über ISP 
abzunehmen oder dran zu lassen, daran liegts auch nicht...
Wenn ich MOSI und SCK beim uC-Programmieren dran lasse, hab ich kurz 
zwei dreimal einen schwarzen Bildschirm...

HILFE!!!

Autor: Stephan Henning (stephan-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
tja jetzt wissen wir aber immer noch nicht, was nicht geht.
Sind Balken da , fehlen Zeichen, kommt gar nichts oder was ?
Kontrast wird angeschlossen sein ..oder ?
Ist es initialisiert ? Oder sind nur 1 oder 2 Balken da ?
Fragen über Fragen.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>        ldi temp1, (1<<MSTR)
>        out SPCR, TEMP1

Was soll denn der Unsinn?
Damit hast du SPE gelöscht. SPI abgeschaltet.

Autor: Sven B. (svenba)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh, ok, hast ja Recht...

Das Display bleibt aus(zeigt nichts an), bis auf das kurze 
"Komplett-Schwarz" während der uC-Programmierung, wenn ich die 
SPI-Leitungen dran lasse.
Kontrast läuft doch über Hardware, oder was meinst du? Die 8 Cs hab ich 
angeschlossen.
Anscheinend wird es noch nicht einmal initialisiert.

Autor: Sven B. (svenba)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ holger:

Kannst mir das mal bitte erklären?

Werds mal löschen, wahr irgendwann mal ne fixe Idee, um sicher zu gehen, 
dass der uC auch bei ungenutztem /SS auf Mstr bleibt... Unfug??

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Werds mal löschen, wahr irgendwann mal ne fixe Idee, um sicher zu gehen,
>dass der uC auch bei ungenutztem /SS auf Mstr bleibt... Unfug??

Ja. Setz SS auf Ausgang dann bleibst du auch Master.

Autor: Sven B. (svenba)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sooooo, habs so gemacht und "es" ist zum Leben erwacht.... EENDLICH!!!
Hab zwar nicht ganz das Bild, welches ich wollte aber das sollte dann ja 
klappen!

Hab fast Pippi in den Augen!! ;-)

Jetzt hab ich die Platine hoch genommen und alles ist wieder tot... Was 
sagt mir das? Die Sch... Buchsenleisten haben nicht immer Kontakt und 
ich hab mit der Messspitze beim Messen den Druck hergestellt, den er 
brauchte... Zum kotzen!

...Lötkolben heizt grad auf, Ihr seid Spitze!!
Muss dann "nur" noch einen vernünftigen Transfer meiner Daten hin 
kriegen...

Autor: Sven B. (svenba)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmmm... Umgelötet! Nach Neustart zeigt er wilde Pixel an und dann 
verblasst alles.... Sieht nach Kondensatorproblem aus, welche habt ihr 
da genommen? Hab 1uF Tantal genommen, sind die falsch??
Hat sich erledigt, einer war verpolt, der hat wohl die Spannung runter 
gezogen... Danke euch!!!

Autor: Sven B. (svenba)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe jetzt das Problem, dass ich immer nur eine Spalte voll schreiben 
kann, auch wenn ich über 132 Werte zum Display schicke.
Diese 132 Werte werden aber richtig angezeigt...
Muss ich dem Display nach der Spalte sagen, dass er in die nächste 
springen muss??

Autor: Stephan Henning (stephan-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
bei Displays muß man sich für gewöhnlich um alles selber kümmern.
Also auch Zeilen und Spaltenumschaltung.

Autor: Sven B. (svenba)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja, bei den parallelen, die ich bis jetzt eingesetzt hab, liefen die 
Daten einfach in der nächsten Zeile weiter.
Wie wäre denn ein Befehl, um ihn in die nächste Spalte springen zu 
lassen?
Frage mich immer noch, wie ich beim DOGM132-5 die Zeilenbreite /höhe usw 
einstelle, hab die Init aus dem Datenblatt übernommen... Jemand nen 
Tipp?

Autor: Stephan Henning (stephan-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Naja, bei den parallelen, die ich bis jetzt eingesetzt hab, liefen die
> Daten einfach in der nächsten Zeile weiter.

genau, nur das manchmal zB. bei 4 Zeiligen eine Zeile dazwischen frei 
bleibt, wenn man sich nicht darum kümmert.

Meine Vermutung:
nach der 131sten Spalte sollte die nächste Page anfangen.
Also Page umschalten. Datenblatte Seite 5.

Habe mit dem Ding noch nicht gearbeitet.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.