Forum: Mikrocontroller und Digitale Elektronik Programmänderung DS1820


von Marco (Gast)


Angehängte Dateien:

Lesenswert?

Hallo...
Im Internet habe ich folgendes Programm für einen AT90S2313 gefunden, 
diese möchte ich so verändern, das es auf einem AT90S8515 läuft. Alle 
meine Versuche sind gescheitert...
Wer kann mir bei der Änderung helfen und diese gegebenfalls auch 
kommentieren, so das es für mich nachvollziehbar ist.
Danke...

von Marco (Gast)


Lesenswert?

Ach so ich habe da noch was vergessen, die Temperatur soll nicht über 
ein LCD sondern, über Terminalprogramm angezeigt werden.

von Dieter Brüggemann (Gast)


Lesenswert?

Hallo  Marco

Erstmal mußt du den Stackpointer auf den 8515 anpassen. Der 8515 hat SP 
register.

Dann uß natürlich hier der richtige MCU eingetragen werden.

.include "d:\avr\2313def.inc"

Taktfrequenz muß natürlich paßen, wegen der delays.

Was sagt den das Studio ???
MFG

Dieter

von Marco (Gast)


Angehängte Dateien:

Lesenswert?

So ich habe nun den Pfad geändert.
In der Simulation läuft das Programm bis:

wait500us:
  ldi delay2, 6
  ldi delay1, 200
  wait500us_1:
  inc delay1
  brne wait500us_1
  dec delay2
  brne wait500us_1
  ret

und hängt dann dort irgend wo fest...

von Dieter Brüggemann (Gast)


Lesenswert?

Hallo Marco

Schau mal rein.

http://www.mikrocontroller.net/tutorial/stack.htm

Der Stack Pointer paßt noch nicht.

MFG
Dieter

von Peter D. (peda)


Lesenswert?

So gehts nicht !

Du must nach dem Start der Messung min 0,5s warten (0,75s beim DS18B20).

Mann kann auch das Busy-Bit testen, d.h. immer Reset und ein Bit lesen 
usw. bis Bit = 1, aber nur, wenn man kein parasite power benutzt.


Um den Code portabel zu halten, sollte der 1W-Pin mit einem Namen und 
nicht direkt angesprochen werden.

Auch die ganzen Delays sollte man den Assembler aus der Quarzfrequenz 
selber berechnen lassen, damit man auch andere Quarze verwenden kann, 
wie z.B. hier:

http://www.mikrocontroller.net/forum/read-4-27035.html

Auch ist es einfacher, gleich einen DS18B20 zu nehmen, da muß man nicht 
erst viel rechnen, um das Ergebnis in 0,0625°C-Schritten zu erhalten.


Ob das delay 500µs ist weiß ich nicht, aber es ist keine Endlosschleife, 
d.h. es hängt nicht fest.


Peter

von Marco (Gast)


Lesenswert?

@ >Dieter
ich bin absoluter Neuling  auf dem Gebiet und einiges fällt mir noch 
echt schwer zu verstehen.
Ich benötige immer ein laufendes Programm, was ich nachvollziehen kann, 
um es zu verstehen.

von Dieter Brüggemann (Gast)


Lesenswert?

Hallo Marco

Wenn du die 2 Zeilen einträgst, läuft es bei mir durch. Ob es geht kann 
ich dir im Moment nicht sagen.

ldi temp1, LOW(RAMEND)  ;LOW-Byte der obersten RAM-Adresse
out SPL, temp1
ldi temp1, HIGH(RAMEND) ;HIGH-Byte der obersten RAM-Adresse
out SPH, temp1

anstatt von

ldi temp1, ramend      ;stack einrichten
out spl, temp1

Der 8515 hat mehr speicher und muß deshalb über 2 variablen eingestellt 
werden. Man stellt damit den SP auf das Ende des Speichers ein. In 
diesem Bereich werden dann die Rücksprungadressen gespeichert, für rcall 
usw.

MFG
Dieter

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
Noch kein Account? Hier anmelden.