PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ATMega128 auf STK500/501-Nix als Probleme...



RalfP
16.12.2005, 10:19
Hallo.

Nachdem ich meine ersten Versuche mit dem ATmega8 einigermaßen erfolgreich abgeschlossen habe und z.B. auch das NOKIA LPH7779 angesteuert habe, möchte ich nun den 128er auf dem STK500/501 programmieren.

Bis jetzt wehrt sich dieser jedoch noch mit Händen und Füßen dagegen.

Ich hab´s zwar geschafft mit folgendem Programm eine LED auf Tastendruck zum Leuchten zu bekommen...

'-----------------------------------------
$regfile = "m128def.dat"
$crystal = 1000000

Config Portb = Output
Config Portd = Input

Do
If Pind.0 = 0 Then 'Wenn Taste an PortD.0 gedrückt ist...
Reset Portb.0 '...LED an PortB.0 einschalten
Else '...ansonsten
Set Portb.0 '...LED an PortB.0 ausschalten
End If
Loop

End
'-----------------------------------------

...aber folgendes Programm, mit dem ich eine LED einschalte, eine Sekunde warte und dann noch ´ne zweite LED einschalten will schaltet beide LEDs gleichzeitig ein. :-k

'-----------------------------------------
$regfile = "m128def.dat"
$crystal = 1000000

Config Portb = Output

Do
Reset Portb.0
Wait 1
Reset Portb.3
Loop

End
'-----------------------------------------
Woran kann das liegen daß der Wait-Befehl anscheinend übersprungen wird ???

Wenn ich z.B. eine LED einschalte kann ich sie mit einem nachfolgenden Set ... auch nicht mehr ausschalten.

Seltsam, seltsam... :-k

Ich hoffe, daß mir von Euch jemand helfen kann. Ich verzweifel sonst noch.

Danke schon mal.

Gruß Ralf

Ratber
16.12.2005, 14:17
Ich sehe das nur Zwei Resetbefehle für b.0 und b.3


Wie hast du denn die LEDs an den Controller gehangen ?

m.artmann
16.12.2005, 14:24
Probier doch mal folgendes


$regfile = "m128def.dat"
$crystal = 1000000

Do
Reset Portb.0
Wait 1
Set Portb.0
Wait 1
Loop

End

Gruß
m.artmann

RalfP
16.12.2005, 14:50
Hallo Ratber.
Die LEDs sind auf dem STK500 ja standardmässig drauf. Sie sind an PortB.0 und PortB.3 angeschlossen. Mit Reset Portb.x schalte ich die LED an, mit Set Portb.x entsprechend aus.

Hallo m.artmann.
Wenn ich

...
Do
Reset Portb.0
Wait 1
Set Portb.0
...

mache leuchtet die LED und bleibt an.

Drehe ich das ganze um, also

...
Do
Set Portb.0
Wait 1
Reset Portb.0
...

bleibt die LED dunkel.

Es wirkt so, als ob die Programmausführung am Wait hängen bleibt.

Habe Ihr ´ne Idee ??? Ich versteh das ganze nicht. ](*,)

Gruß Ralf

m.artmann
16.12.2005, 15:44
Dann hast Du mit Sicherheit das zweite "Wait 1" vergessen.
Der zweite Befehl wird dann zwar ausgeführt, aber viel schneller als dass Du es sehen könntest ;-)

Du mußt Dir die Reihenfolge vorstellen:

1. LED ein (Reset Portb.0)
2. eine Sekunde warten (Wait 1)
3. LED aus (Set Portb.0)
4 eine Sekunde warten (Wait 1)
5 wieder von vorne abfangen (Do...Loop)

Gruß
m.artmann

Ratber
16.12.2005, 17:45
@Ralf

Zu "Ein/Aus"

Je nachdem ob man die LED nach Vcc oder Gnd schaltet leuchtet sich auch bei Set oder Reset.
Ds sollte man berücksichtigen sonst kommt man schnell in schleudern.
zb. wie hier bei nem fehlenden Wait.
Deswegen die Frage nach der Beschaltung.

Wasi
16.12.2005, 18:19
Hi,

hab das mal so getestet:


$regfile = "m128def.dat"
$crystal = 1000000


Ddrb = &B00000001
Ddrd = &B00000000


Do
Reset Portb.0
Wait 1
Set Portb.0
Wait 1
Loop

End


Die LED geht an und sonst passiert da nichts!

Hab das dann mal mit einem Taster getestet:


$regfile = "m128def.dat"
$crystal = 1000000


Ddrb = &B00000001
Ddrd = &B00000000


Do

If Pind.0 = 0 Then
Portb.0 = 0
Waitms 2000
Else
Portb.0 = 1

End If
Loop

End

Die LED geht nach einem Tastendruck an und bleibt die 2sec an und geht dann wieder aus.

Warum sich das obere anderst verhält was die wartezeit betrifft weiß ich
jedenfalls nicht.

Hab auch getestet ob das wegen dem Wait bzw. Waitms ist, das verhält sich aber gleich.

Würde mich auch interresieren warum das so ist.

Ratber
16.12.2005, 20:36
Keine Ahnung warum das erste nicht klappt.
Vieleicht irgendein Steurcode im Code.
Da hilft manchmal die Zeile komplett neu zu schreiben.


Apropos M128
Der läuft nicht zufällig noch als M103 ? (M103 Fuse)

Wasi
16.12.2005, 20:54
Apropos M128
Der läuft nicht zufällig noch als M103 ? (M103 Fuse)

Oh oh oh...

Jo, das is es, bei mir hab ich den M103 Fuse mal raus gemacht, und siehe er Blinkt!

@Ralf, schau auch mal nach!

;)

Ratber
16.12.2005, 21:41
Yo,das hat Atmel etwas unglücklich gelöst

RalfP
30.12.2005, 18:09
Yo Leute.

Entschuldigung, daß ich mich erst jetzt wieder melde.

Inzwischen hab ich es geschnallt.
Erstens war tatsächlich der M103 Kompatibilitäts-Modus schuld und zweitens noch ein krasser Denkfehler.

Die Ports haben ja nach Ihrer Definition als Ausgang erst mal alle LOW.
Wenn ich dann nach einem Wait 1 mit einem Reset Portx.y versuche eine LED, die über einen Vorwiderstand an +5V angeschlossen ist, einzuschalten, kann ich auch Wait 1000 davor schreiben und die LED brennt trotzdem sofort, da der Portpin ja ohnehin schon LOW-Pegel hat. ](*,)

Es funzt auf jeden fall alles wunderbar. Sogar die Ansteuerung des LPH7779 Grafik-LCD (NOKIA 3310). \:D/

Gruß Ralf

Ratber
30.12.2005, 20:04
Yo,dann hats ja was genutzt