hier der zweite Versuch mit anders formulierter Frage.
In der Datei rufe ich oben in der Initialisierung vor der Endlosschleife
die Methode DHT_lesen auf. Die Parameter werden unmittelbar davor
eingestellt(Speicheradresse für Y; Datenmaske für die Abfrage des PINC
und setzen des PortC und Position des Kursers im Display)
Der anschließende Aufruf funktioniert auch was jedoch nicht geht ist ein
weiterer Aufruf mit geänderten Vorgaben.
Der zweite Aufruf funktioniert aber wenn ich den forigen auskommentiere!
also sollte eigentlich das Programm die Werte beider Sensoren eigentlich
im Display ausgeben. Aber es läuft immer nur bis zur Positionierung des
Cursers für die Werte des zweiten Sensors und das wwars dann.
Wo liegt der Fehler das der 2te Aufruf der Routine nicht gemacht wird?
MfG Fritz
also ich hab grad den Simulator laufen lassen kann aber bis jetzt nichts
im Ablauf finden was stört oder nicht so läuft wie es soll. Allerdings
musste ich etliche Methoden umändern oder auskommentieren damit ich es
erst mal im Simulator laufen lassen konnte (z.B. die Initialisierung des
LCD oder alle Routinen die eine Eingabe benötigen.
Das Timing für das LCD ist unproblematisch und funktioniert!
Der Stack ist anscheinend auch kein Problem denn von den 1024 Byte
benötige ich nur 10 Byte für die Zwischenspeicherung der Sensor Werte.
Beim Ablau fdes Programms werden auch beide Sensoren nacheinande
ausgelesen und die werte in die Byts geschreben.
Kann es an irgendwelchen rjmp Befehlen liegen die nicht funktionieren?
Der Ablauf funktioniert genau bis zum setzen des Cursers an die Stelle
wo die Daten des zweiten Sensors ausgegeben werden sollen und dann
.....nichts!
Fehler gefunden! Aber warum funktioniert das jetzt?
Das einzige das ich geändert hab ist das setzen des DDRC Portregisters
auf eine ander weise (nämlich über r16 und nicht über r24 (DHTmaske).
Ich kanns mir nicht erklähren aber um zukünftig besser klar zu kommen
wäre es hilfreich das ganze zu verstehen....
Wäre echt dankbar für eine Erklährung des ganzen!
danke!!!
MfG Fritz
alter code:
Fritz Bie schrieb:> Das einzige das ich geändert hab ist das setzen des DDRC Portregisters> auf eine ander weise (nämlich über r16 und nicht über r24 (DHTmaske).
Vor allen Dingen setzt du es, während in deinem Originalcode
1
DHT_lesen:
2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3
; Initialisieren der Startsequenz
4
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
5
6
nop
7
nop
8
nop
9
ldi temp,0x00
10
; ldi arg,0x00
11
out PORTC,r0
12
ldi r16,6 ;6 mS
13
rcall waitMs ;min 1ms warten
14
15
16
out PortC,DHTmaske ;über DHT auf 1 setzen (ist Pin an dem der Sensor hängt)
17
ldi arg,8
18
...
genau das eben nicht grantiert war. Hier wurde nur PORTC per DHTmaske
gesetzt, nicht jedoch DDRC.
Das andere ist natürlich, dass du eine unterschiedliche Behandlung des
Bits an der Wertigkeit 0x04 hast.
hier