Aquariencomputer :-D

Hallo liebes Forum,

nach einem schönen Sonntag an meinem Nemo :D habe ich ein paar neue Erkenntnisse und würde euch gerne um Rat fragen.

Ich hab heute meinen kompletten Code aufgeräumt und ein paar Fehler ausgemerzt. Beim testen ist mir mit dem Oszi aufgefallen das mein Controller ab einem gewissen
Initialisierung's punkt nicht weiter macht oder ihn eher überspringt. Ich habe dann (auch wenn jetzt vielleicht jemand schreien wird) mit dem Simulator ein paar mal das Programm durch gefahren
und es klappte immer dort aber halt auf der Platine nicht. Nun zum Problem:

Das Datenbit 5 nehme ich als Referenz weil es in fast allen Initialisierung's Codes vorkommt. Alle anderen Datenbit's machen auch was sie sollen das habe ich auch schon nach geprüft.

Das Datenbit DB 5 wird High und der Enable impuls kommt drei mal danach wird das Datenbit wieder low (entspricht ja dem Binärcode 00100000 zur Initialisierung) . Alle anderen Port's für die DB sind auch wirklich low.

Danach kommen 2 Enable impulse das erste mal ist das DB 5 High und das zweite mal low ( entspricht dem Binärcode 00101000 um das Display auf 4-Bit,2 Zeilig und 5*7 Punkte einzustellen).

Dann kommen wieder 2 Enable impulse das erste mal ist das DB 5 low das zweite mal High ( entspricht dem Binärcode 00001111 um das Display einzuschalten, Cursor ein und Cursor Blinken)

Dann kommt nichts mehr wenn ich jetzt in mein Hauptprogramm noch ein Buchstabe eingebe denn das LCD ausgeben soll macht es das auch aber alles kein Problem aber die Initialisierung bricht quasi ab.

Ich würde ja gerne nen Bild meines Oszis hochladen damit ihr das seht aber 1. funktioniert die PC Software wohl nicht unter W7 und zum zweiten wird mein USB-Stick nicht erkannt wahrscheinlich zu groß denke ich.



Vielen danke schon mal im voraus echt klasse Forum hier :D kann man nur weiter empfehlen

PS: Der aufgeräumte Code ;)

Code:
; Aquariencontroller V0.1
; Steuerung von 8 Relais, integrierte Uhr zum Steuern per Zeit, Messung der Platinen Temperatur.Steuerung über ein PC-Prog.

.include "m32def.inc"

;Register definieren

.def temp1 			= r16
.def temp2 			= r17
.def temp3 			= r18
.def Taster_neu 	= r19
.def Taster_alt		= r20
.def Taster_jetzt   = r21
	

;Pins anpassen, Frei wählbar
.equ F_CPU		 = 4000000
.equ BAUD		 = 9600
.equ SchiebeDDR  = DDRA
.equ SchiebePort = PORTA
.equ SchiebePin  = PINA
.equ Clock_In    = PA2
.equ SH_LD 	     = PA0
.equ SER_In	     = PA1
.equ Clock_out   = PA3
.equ RCK  	     = PA4
.equ SER_Out     = PA5
.equ LCD_DDR	 = DDRC
.equ LCD_Port	 = PORTC
.equ LCD_RS		 = PC1
.equ LCD_E		 = PC2
.equ LCD_DB7     = PC7
.equ LCD_DB6     = PC6
.equ LCD_DB5     = PC5
.equ LCD_DB4	 = PC4



;Datensegment im Ram

.dseg
.org 0x60


;Programmsegment im Flash

Neustart:

.cseg
   
   	    ldi     temp1, HIGH(RAMEND)  ; Stackpointer initialisieren
  	    out     SPH, temp1
  	    ldi     temp1, LOW(RAMEND)
	    out     SPL, temp1

        
    	

;Eingänge und Ausgänge Initialisieren

		ldi 	temp1,(1<<Clock_In) | (1<<SH_LD) | (1<<Clock_Out) | (1<<RCK) | (1<<SER_Out)
		out 	SchiebeDDR, temp1

		sbi     SchiebePort,Clock_In ;Takt beim 74xx165 im Ruhezustand auf 1

		ldi 	temp1,(1<<LCD_RS) | (1<<LCD_E) | (1<<LCD_DB7) | (1<<LCD_DB6) | (1<<LCD_DB5) | (1<<LCD_DB4)
		out     LCD_DDR,temp1

;LCD Initialisieren im 4 Bit-Modus

		rcall	LCD_Init
		
		

		
Hauptprogramm:
		ldi		temp1,'u'
		rcall	LCD_Daten
Hauptprogramm1:
		rjmp	Hauptprogramm1

 	





.include "Zeiten"
.include "LCD-Routinen"

Code:
LCD_Enable:
		nop
		nop
		nop
		sbi		LCD_Port,LCD_E
		rcall	Warte_1ms
		cbi		LCD_Port,LCD_E
		nop	
		nop
		ret
	

LCD_Befehl:
		mov		temp2,temp1	
		andi	temp1,0b11110000
		out		LCD_Port,temp1
		rcall	warte_1ms
		rcall	LCD_Enable
		swap	temp2
		andi	temp2,0b11110000	
		out		LCD_Port,temp2
		rcall	LCD_Enable
		rcall	Warte_5ms
		ret
		
LCD_Daten:
		mov 	temp2,temp1
		andi	temp1,0b11110000
		sbr     temp1, (1<<LCD_RS)
		out		LCD_Port,temp1
		rcall	LCD_Enable	
		swap	temp2
		andi	temp2,0b11110000
		sbr     temp2, (1<<LCD_RS)	
		out		LCD_Port,temp2
		rcall	LCD_Enable
		rcall	Warte_5ms
		cbi		LCD_port,LCD_RS
		ret	

LCD_Init:
		rcall	Warte_5ms
		ldi		temp1,0b00100000		; 4-Bit Modus einstellen
		out		LCD_Port,temp1
		rcall	warte_1ms
		rcall	LCD_Enable				; 1 mal
		rcall	Warte_1ms
		rcall	LCD_Enable				; 2 mal
		rcall	Warte_1ms		
		rcall	LCD_Enable				; 3 mal
		rcall	Warte_1ms	
		ldi		temp1,0b00101000		; 4-Bit,2 zeilen, 5x7 Dot's
		rcall	LCD_Befehl
		ldi		temp1,0b00001111		; Display ein,Cursor ein,Cursor blinken
		rcall	LCD_Befehl
		ldi		temp1,0b00000001		; Display löschen
		rcall	LCD_Befehl
		ldi		temp1,0b00000110		; Autoinkrement ein, Cursor schieben 		
		rcall	LCD_Befehl
		ret

Code:
;Zeitroutinen für 1ms,5ms,15ms

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Warte_1ms:
		push	r16
		push 	r17
		ldi		r16,0x1F
W1ms_1:
		ldi		r17,0x2A
W1ms_2:
		dec		r17	
		brne	W1ms_2
		dec		r16	
		brne	W1ms_1
		pop		r17	
		pop		r16
		ret

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Warte_5ms:
		push	temp1
		push	temp2
		ldi		temp1,0x21
W5ms_1:
		ldi		temp2,0xc9
W5ms_2:
		dec		temp2
		brne  	W5ms_2
		dec		temp1
		brne	W5ms_1
		pop		temp2
		pop		temp1
		ret

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Warte_15ms:
		push	r16
		push	r17
		ldi		R16,0x63		
W15ms_1:
		ldi		r17,0xC9
W15ms_2:
		dec		r17
		brne	W15ms_2
		dec		r16
		brne	W15ms_1
W15ms_3:
		ldi		r16,0x02
		dec		r16
		brne	W15ms_3
		pop	  	r17
		pop		r16
		ret

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
Flankensteilheit

Hallo liebes Forum,

ich habe mich in denn letzten Tagen mal wieder etwas mit meinem Projekt beschäftigt.

Beim lesen des Datenblattes des LCD-Modul's ist mir aufgefallen das dort großen wert auf die Flankensteilheit des Enable impuls gelegt wird diese
soll maximal 25ns betragen beim Nachmessen meiner Flanken habe ich festgestellt das ich bei 19µs liege. Wie kann ich das ändern?:confused:

Habe schonmal im Internet gesucht und es mit pull-up bzw pull-down Widerständen versucht bisher ohne erfolg.

liebe grüße

Daniel
 
Hi Daniel,

Beim lesen des Datenblattes des LCD-Modul's ist mir aufgefallen das dort großen wert auf die Flankensteilheit des Enable impuls gelegt wird diese
soll maximal 25ns betragen beim Nachmessen meiner Flanken habe ich festgestellt das ich bei 19µs liege. Wie kann ich das ändern?:confused:
wie hast du das gemessen? Mit einem Digitalspeicherscope und Tastkopf? Denk dran das deine Messleitung auch eine Kapazität hat und dadurch einen Tiefpaß bildet. Du verflachst also deine Anstiegszeit am LCD bereits mit einer Messung durch die Eingangskapazität des Tastkopfes. Zusätzlich wird die Anstiegszeit auf dem Weg zum Oszilloskopeingang durch die Leitung (Tiefpaß) verflacht.

Nimm mal den Testausgang des Oszilloskopes und leg da den Tastkopf dran. Der Testgenerator sollte normalerweise sehr steile Flanken liefern. Dann hast du mal eine Vergleichsmöglichkeit. Die Flankensteilheit des Testgenerators sollte auch im Datenblatt/Handbuch des Oszilloskops drinstehen.

Für eine gute Messung der Flankensteilheit mit einem DSO benötigst du eine sehr hohe Abtastgeschwindigkeit, eine hohe Eingangsbandbreite und einen Tastkopf der auch entsprechend die hohen Frequenzen durchläßt. Die meißten Tastköpfe liegen ja bei 100-300MHz. 100MHz ist aber bereits eine Zeit von 10ns. Bei den Frequenzangaben wird aber bei günstigen Herstellern noch mathematisch ein wenig geschummelt um besser da zu stehen. Mit einem DSO das "nur" 500MSamples/sec hat brauchst du solche Messungen eigentlich garnicht erst anfangen. Da wird sowieso "nur" alle 2ns abgetastet. Aus dem Grund lege ich sehr viel Wert auf hohe Abtastraten um eine gute zeitliche Auflösung zu bekommen.

Müßte ich bei meinen Oszilloskopen auch mal durchtesten wie es da aussieht um eine saubere Meßbasis zu haben :rolleyes:

Wobei ... 19µs sind doch schon recht heftig. Ist da eventuell ein Meßfehler reingekommen?

Gruß
Dino
 
Hi Dino,

ich hab dein Rat befolgt und festgestellt das mein Oszi falsch eingestellt war (peinliche sache bei nem Auto button) ist zwar nicht das teuerste Oszi aber ich glaube und habe mich da mal im Internet schlau gemacht das ich mich wohl
auf die Ergebnisse verlassen kann bei dem was ich Maximal damit vor habe. Die Anstiegszeit im Datenblatt beträgt unter 7 ns gemessen habe ich 6,4ns.

Dann suchen wir mal weiter nach dem Fehler ;-)

Danke

Daniel :)
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)