- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 10 von 10

Thema: LCD noch zu retten ?????

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Begeisterter Techniker Avatar von Torrentula
    Registriert seit
    10.10.2009
    Ort
    Procyon A
    Beiträge
    355
    Ob ich durch das weitere ausprobieren den Quelltext mittlerweile so durcheinander gebracht habe, dass nichts sinnfolles mehr herauskommt, kann natürlich auch sein
    Du kannst auch den Code mal hier posten, damit man wenigstens da Fehler ausschließen kann. Ob Basic oder C es finden sich genügend Anhänger beider Sprachen hier
    MfG Torrentula

  2. #2
    Neuer Benutzer Öfters hier Avatar von Spitfire
    Registriert seit
    09.07.2012
    Ort
    Niederösterreich
    Beiträge
    28
    Hallo zusammen !!!

    Der ursprüngliche Code, welcher in Assembler geschrieben ist:

    Code:
    .include "m8def.inc"
    	
    	ldi r16, 0xFF
    	out DDRD,r16						;Im Datenrichtungsregister PORTD als Ausgang deklarieren
    
    	ldi r18, 0xFF					;Dem Diplay Zeit geben um sich selbst zu initialisieren
    	ldi r16, HIGH(RAMEND)
    	out sph, r16
    	ldi r16, LOW(RAMEND)
    	out SPL, r16
    
    	rcall Warten
    ;
    ;	cbi PORTD, 6					;Den 6.Port (PD6) = R/W auf low setzen um in den Schreibmodus zu stellen
    	cbi PORTD, 4					;Den 4.PORT (PD4) auf low setzen um in den Komandomodus zu wechseln
    ;	;ldi r16,0b00000010
    	out PORTD, r16
    	sbi PORTD, 5					;Den 5.PORTD (PD5) auf High setzen, um den Display zu Signalisieren, das es die Daten von PD0 bis PD4 übernehmen kann
    	nop								; 3 Taktzyklen warten, um dem Display, für die Datenübernahme, genügend Zeit zu geben
    	nop
    	nop
    	cbi PORTD, 5					;PD5 wieder auf LOW setzen
    ;
    ;	ldi r18, 0xFF					;Dem Diplay Zeit geben um sich selbst zu initialisieren
    ;	ldi r16, HIGH(RAMEND)
    ;	out sph, r16
    ;	ldi r16, LOW(RAMEND)
    ;	out SPL, r16
    ;;	
    	rcall Warten
    ;;	
    	ldi r16, 0b00000010
    	out PORTD, r16					;Den 1.Port (PD1) am Display DB5 auf High setzen um in den 4-Bit Modus zu wechseln
    
    	sbi PORTD, 5					;Den 5.PORTD (PD5) auf High setzen, um den Display zu Signalisieren, das es die Daten von PD0 bis PD4 übernehmen kann
    	nop								; 3 Taktzyklen warten, um dem Display, für die Datenübernahme, genügend Zeit zu geben
    	nop
    	nop
    	cbi PORTD, 5
    ;;	
    ;	ldi r18, 0xFF					;Dem Diplay Zeit geben um sich selbst zu initialisieren
    ;	ldi r16, HIGH(RAMEND)
    ;;	out sph, r16
    ;	ldi r16, LOW(RAMEND)
    ;	out SPL, r16
    	rcall Warten
    ;	rcall Befehl
    	
    
    
    					;***********************************************************************************************************************************
    	ldi r18, 0xFF					;Dem Diplay Zeit geben um sich selbst zu initialisieren
    	ldi r16, HIGH(RAMEND)
    	out sph, r16
    	ldi r16, LOW(RAMEND)
    	out SPL, r16
    	rcall Warten
    
    	ldi r16, 0b01001101				;M
    	rcall Ausgabe
    	ldi r18, 0xFF					;Dem Diplay Zeit geben um sich selbst zu initialisieren
    	ldi r16, HIGH(RAMEND)
    	out sph, r16
    	ldi r16, LOW(RAMEND)
    	out SPL, r16
    	
    	rcall Warten
    
    	ldi r16, 0b01100001				;a
    	rcall Ausgabe
    	ldi r18, 0xFF					;Dem Diplay Zeit geben um sich selbst zu initialisieren
    	ldi r16, HIGH(RAMEND)
    	out sph, r16
    	ldi r16, LOW(RAMEND)
    	out SPL, r16
    	
    	rcall Warten
    ....

    hier wiederholt sich der Code immer wieder, nur der Eintrag in r16 wird auf andere Buchstaben (Binärcode) geändert

    .....

    und hier geht´s weiter:

    Code:
    	ldi r16, 0b00100001				;!
    	rcall Ausgabe
    	ldi r18, 0xFF				;Dem Diplay Zeit geben um sich selbst zu initialisieren
    	ldi r16, HIGH(RAMEND)
    	out sph, r16
    	ldi r16, LOW(RAMEND)
    	out SPL, r16
    	
    	rcall Warten
    
    loop1:
    rjmp loop1
    
    Befehl:
    	;ldi r16, 125					;Ab dieser Zeile ist das Programm nur Abgeschrieben
    
    	mov r17,r16						;  Kopie von r16 in r17 eintragen
    
    	swap r16						; vertauscht die beiden Nibbles von r16 (Die Bit´s 0-3 und 4-8 werden vertauscht)
    
    	andi r16, 0b00001111			; Nur die vier unteren (mit 1 markierten)
    									; Bits werden übernommen, alle anderen werden null
    
    	sbr r16, 0b00010000				; Bit 4 auf low setzen, alle anderen Bits bleiben gleich
    	
    	out PORTD, r16
    	
    	sbi PORTD, 5					;Den 5.PORTD (PD5) auf High setzen, um den Display zu Signalisieren, das es die Daten von PD0 bis PD4 übernehmen kann
    	nop								; 3 Taktzyklen warten, um dem Display, für die Datenübernahme, genügend Zeit zu geben
    	nop
    	nop
    	cbi PORTD, 5					;PD5 wieder auf LOW setzen
    
    	andi r17, 0b00001111
    
    	sbr r17, 1<<4					; nur eine andere Schreibweise von oben
    
    	out PORTD, r17
    
    	sbi PORTD, 5
    	nop
    	nop
    	nop
    	cbi PORTD, 5
    	sbi PORTD, 4
    	ret
    
    Ausgabe:
    	;ldi r16, 125					;Ab dieser Zeile ist das Programm nur Abgeschrieben
    
    	mov r17,r16						;  Kopie von r16 in r17 eintragen
    
    	swap r16						; vertauscht die beiden Nibbles von r16 (Die Bit´s 0-3 und 4-8 werden vertauscht)
    
    	andi r16, 0b00001111			; Nur die vier unteren (mit 1 markierten)
    									; Bits werden übernommen, alle anderen werden null
    
    	;sbr r16, 0b00010000				; Bit 4 setzen, alle anderen Bits bleiben gleich
    	sbr r17, 1<<4
    	out PORTD, r16
    	
    	sbi PORTD, 5					;Den 5.PORTD (PD5) auf High setzen, um den Display zu Signalisieren, das es die Daten von PD0 bis PD4 übernehmen kann
    	nop								; 3 Taktzyklen warten, um dem Display, für die Datenübernahme, genügend Zeit zu geben
    	nop
    	nop
    	cbi PORTD, 5					;PD5 wieder auf LOW setzen
    
    	andi r17, 0b00001111
    
    	sbr r17, 1<<4					; nur eine andere Schreibweise von oben
    
    	out PORTD, r17
    
    	sbi PORTD, 5
    	nop
    	nop
    	nop
    	cbi PORTD, 5
    	ret
     
    Warten:
    	dec r18
    	brne Warten
    ret
    
    BussyAbfrage :
    
    	ldi r18, 0b00010100					;Dem Diplay Zeit geben um sich selbst zu initialisieren
    	ldi r16, HIGH(RAMEND)
    	out sph, r16
    	ldi r16, LOW(RAMEND)
    	out SPL, r16
    	
    	rcall Warten
    
    	sbi PORTD, 6					;Port 6 (PD6) = R/W auf high setzen, für den lesemodus
    	cbi DDRD, 3						;PORTD-3 (PD3) von Ausgang auf Eingang (PIND-3) ändern
    	nop								
    	sbi PORTD, 5					; PD5 (E) auf High setzen
    	nop
    	nop
    	nop
    	in r16,PIND						; Einlesen des oberen Daten Nipples von Port D
    	nop
    	cbi PORTD, 5					; PD5 (E) auf Low setzen (E-Wackeln)
    	nop
    	sbi PORTD, 5						; PD5 (E) wieder auf High setzen
    	nop
    	in r17, PIND					; Einlesen des unteren Daten Nipples von Port D
    	nop
    	cbi PORTD, 5					; PD5 (E) auf Low setzen (E-Wackeln)
    	
    	swap r16
    	andi r16, 0b10000000
     	brne BussyAbfrage
    	cbi PORTD, 6					;Den 6.Port (PD6) = R/W auf low setzen um in den Schreibmodus zu stellen					
    	sbi DDRD,3						; PORT-3 (PD3) wieder als Ausgang deffinieren
    ret
    Die Funktionen `Befehl` und `BussyAbfrage` habe ich im Code zweck´s Versuch ebenfalls eingebaut gehabt. Ich kann aber jetzt nicht mehr genau sagen wo, deshalb habe ich auch keinen `rcall` Befehl mehr dafür. Wenn ich diesen Code auf den Atmega brenne, ist das Display einfach leer.

    Mit dem folgenden Code, dieser war, bzw. ist nur zum Testen, und deshalb auch nicht komplett. Aber hier zeigt sich wenigstens etwas am Display. Nur bis gestern hatte ich nur dann Bewegung am Display, wenn ich mit der Hand in die nähe der Anschlußleitungen (Vcc, GND, DB0-DB7...usw) gekommen bin. Ansonsten war ruhe am Display. Jetzt tut sich auch etwas, auch wenn ich nicht in der nähe bin. Die Lötstellen habe ich, wie bereits erwähnt, kontolliert und alle nachgelötet.
    Hier der zweite Code:
    Code:
    .include "m8def.inc"
    
     ldi r16, 0xff
     out DDRD, r16		;PORTD als Ausgang Initialisieren
    
     out DDRB, r16		;PORTB als Ausgang initialisieren
    
    ldi r18, 0b1100100				
    	ldi r16, HIGH(RAMEND)
    	out sph, r16
    	ldi r16, LOW(RAMEND)
    	out SPL, r16
    
    
    	rcall Warten						;Dem Diplay Zeit geben um sich selbst zu initialisieren
    
     ldi r16, 0b00000011
     out DDRB, r16
    
    	ldi r18, 0b1100100				
    	ldi r16, HIGH(RAMEND)
    	out sph, r16
    	ldi r16, LOW(RAMEND)
    	out SPL, r16
    
    
    	rcall Warten						;Dem Diplay Zeit geben um sich selbst zu initialisieren
    
    
      ldi r17, 0b00000001
     loop:
      
      out DDRD, r17
    
    
    ldi r18, 0b1100100				
    	ldi r16, HIGH(RAMEND)
    	out sph, r16
    	ldi r16, LOW(RAMEND)
    	out SPL, r16
    
    
    	rcall Warten						;Dem Diplay Zeit geben um sich selbst zu initialisieren
    
      ;ldi r16, 0b00000010
      ;out DDRB, r16
    
    ldi r18, 0b1100100				
    	ldi r16, HIGH(RAMEND)
    	out sph, r16
    	ldi r16, LOW(RAMEND)
    	out SPL, r16
    
    
    	rcall Warten
    
    	inc r17
    
    ldi r16, 0b00000000
      out DDRB, r16
    
    ldi r18, 0b1100100				
    	ldi r16, HIGH(RAMEND)
    	out sph, r16
    	ldi r16, LOW(RAMEND)
    	out SPL, r16
    
    
    	rcall Warten 
      rjmp loop
    
    
    Warten:
    	dec r18
    	brne Warten
    ret
    Ich hoffe ihr könnt etwas damit anfangen.

    Spitfire

  3. #3
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Die LCD Display sind nicht so teuer. Bis man ein lauffähiges Programm hat, würde ich wirklich ein neues Display empfehlen. Wenn die Software dann läuft kann man dem alten Display ja noch mal eine Chance geben. Die Software zu entwickeln und debuggen mit einer eventuell (vielleicht 80% Chance) defekten Hardware ist ziemlich frustrierend bis aussichtslos.

Ähnliche Themen

  1. Unbemannte Roboter retten Leben im Katastrophenfall
    Von Roboternetz-News im Forum Neuigkeiten / Technik-News / Nachrichten / Aktuelles
    Antworten: 0
    Letzter Beitrag: 14.06.2012, 09:00
  2. Kann man den USB Stick noch retten
    Von pointhi im Forum Elektronik
    Antworten: 5
    Letzter Beitrag: 05.08.2009, 01:00
  3. Akku noch zu retten?
    Von Forchtenauer im Forum Elektronik
    Antworten: 14
    Letzter Beitrag: 22.03.2008, 12:57
  4. register retten
    Von eis im Forum Assembler-Programmierung
    Antworten: 5
    Letzter Beitrag: 07.07.2007, 19:47
  5. Nasa will «Hubble» mit Roboter-Mission retten
    Von Andreas im Forum Neuigkeiten / Technik-News / Nachrichten / Aktuelles
    Antworten: 0
    Letzter Beitrag: 02.06.2004, 12:00

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen