Hallo liebe Forianer
Ich habe ein Problem, bei welchem ich nicht mehr weiter komme.
In einem STK500 steckt ein Atmega 328P.
PB0 und PB1 sind mit LED0 und LED1 verbunden.
Folgenden Code habe ich im AVR Studio 6 übersetzt und auf den Chip
geladen:
1
#include<avr/io.h>
2
3
voidtest(void)
4
{
5
DDRB|=(1<<DDB1);
6
}
7
8
intmain(void)
9
{
10
test();
11
DDRB|=(1<<DDB0);
12
13
while(1)
14
{
15
}
16
}
Es leuchtet nun LED1. Erwarten würde ich aber, dass beide LED leuchten.
Zum Test habe ich folgenden Code compiliert und übertragen: Es leuchten
beide LED.
Kan asta schrieb:> Willst du ihm nicht zwischenzeitlich erstmal den Unterschied zwischen> DDR und PORT erklären?
ist doch egal, auch mit einem PullUp leuchtet die LED. Das verhalten
sollte zumindest immer gleich sein.
> Vielleicht auch mal PORTB mit den richtigen Werten initialisieren ?
auch egal, es ist definiert das es am anfang 0 ist.
Peter II schrieb:> zeig uns mal bitte den ASM code (*.lst) von beiden versionen.>> hast du auch den richtigen Prozessor angeben?
Der Inhalt der LST Files folgt:
Es ist die gleiche Reihenfolge wie oben.
Ich habe den Richtigen Prozessor ausgewählt, ja. Ich habe auch das
Projekt gelöscht und neu angelegt. Ausserdem habe ich letztendlich noch
einen zweiten Mega88PA (es waren beide neu) eingesetzt.
Mit Funktion:
Peter II schrieb:> ist doch egal, auch mit einem PullUp leuchtet die LED. Das verhalten> sollte zumindest immer gleich sein.
Jetzt bin ich mir nicht mehr sicher, ob du oder der TO hier den Troll
macht.
Peter II schrieb:> Kan asta schrieb:>> Willst du ihm nicht zwischenzeitlich erstmal den Unterschied zwischen>> DDR und PORT erklären?>
Der Unterschied ist mir bekannt.
> ist doch egal, auch mit einem PullUp leuchtet die LED. Das verhalten> sollte zumindest immer gleich sein.>>> Vielleicht auch mal PORTB mit den richtigen Werten initialisieren ?> auch egal, es ist definiert das es am anfang 0 ist.
Richtig, daher sollte die Led leuchten, wenn der Port als Ausgang
gesetzt ist (und auf 0 initialisiert), weil beim STK500 die Leds
low-aktiv sind.
der Prozessor ist nicht richtig gesetzt in den Projekteinstellungen. Der
Stackpointer wird auf 0x8ff initialisiert, soviel Ram hat der Mega328
nicht. Damit funktioniert der 'ret' in test() nicht.
Jörg Wunsch schrieb:> Vielleicht ist der Controller ja gar kein ATmega328 ...
das war zumindest die Aussage von Lukas im ersten Satz. Und einen Test
mit dem Mega88P gab es auch. Der Mega88 hat allerdings nur 1k SRAM, das
gleiche binary kann da nicht funktionieren, das hat er vor dem
kompilieren hoffentlich umgestellt.
Herzlichen Dank an JojoS und Jörg Wunsch.
Ihr habt beide Recht: Der ret funktioniert nicht, und der Prozessor ist
kein 328P.
Das ist wohl der peinlichste Fehler, der mir je unterlaufen ist (auch
wenn ich das nur als Hobby mache). Es ist ein Atmega88 (beide, die ich
getestet habe). Jetzt wo auch das AVR-Studio den richtigen Prozessor
kennt, geht es natürlich auch.
Noch einmal vielen Dank dafür, dass ihr mich in die richtige Richtung
gelenkt habt.