Bisher habe aus der AVR-Serie nur Mega32 und Mega8 programmiert. Jetzt muss ich ein Programm von einem Mega8 auf einen Tiny12 portieren. Wie initialisiere ich beim Tiny12 den Stackpointer? In der tn12def.inc habe ich keine Definitionen gefunden, die auf einen Stackpointer hinweisen und eine Konstante RAMEND gibt es auch nicht.
Hallo, schon mal ins Datenbeltt geschaut? Der Tiny12 hat keinen internen Ram... Dazu gibt es einen kleinen Hardware-Stack. Gruß aus Berlin Michael
Da er keinen RAM hat gibt es keinen Stackpointer und auch kein RAMEND. Dafür gibt es einen 3 Level Hardware-Stack. Schau doch mal in die Anleitung. Dort steht auch "Not recommended for new designs".
Ich war etwas irritiert, weil im Blockschaltbild "STACK POINTER" auf "HARDWARE STACK" zeigt. Der kann sich scheinbar nur drei Subroutinenaufrufe merken. Naja, sollte reichen ...
Jetzt jänge ich an einem anderen Problem. Die Pins PB1 und PB2 brauche ich als Eingänge und PB3, PB4 als Ausgänge. Die Ausgänge funktionieren gut, aber bei den Eingägnen klappts nicht. Das Programm läuft im Simulator einwandfrei. Ich habe nun ein kleines Testprogramm ausprobiert, dass die Ausgänge auf 1 setzt, sobald an PB1 +5V anliegen, aber auch das funktioniert nicht. Die Suche im Datenblatt hat mich nur noch mehr stutzig gemacht. PB0, PB1 und PB2 werden für die ISP benötigt. Aber diese Funktion nehmen die doch nur an, wenn Reset auf 0 liegt, oder? Also sollten die Pins im Normalbetrieb als IO-Pins funktionieren? Der Tiny12 wird vom internen OC getaktet. Ich habe die Frequenz mit einem Oszi und einer Testroutine abgelesen, liegt bei etwa 1,2 MHz. Was ist nur mit den Pins los?
Kein Problem, außer Reset kannst du alle Pins benutzen. Zeig mal deinen Code... (Reset geht natürlich unter gewissen Umständen auch...)
Da ist nur das Wesentliche drin, da zu Testzwecken die anderen Routinen eh nicht benötigt werden. -> Anhang
Ich seh gar kein PINB, nur PORTB. Fürs einlesen brauchst du aber das Register PINB.
Aus dem Datenblatt: "Port B as General Digital I/O The lowermost five pins in port B have equal functionality when used as digital I/O pins. PBn, General I/O pin: The DDBn bit in the DDRB register selects the direction of this pin, if DDBn is set (one), PBn is configured as an output pin. If DDBn is cleared (zero), PBn is configured as an input pin. If PORTBn is set (one) when the pin is configured as an input pin, the MOS pull-up resistor is activated. On ATtiny12 this feature can be disabled by setting the Pull-up Disable (PUD) bit in the MCUCR register. To switch the pullup resistor off, the PORTBn can be cleared (zero), the pin can be configured as an output pin, or in ATtiny12, the PUD bit can be set. The port pins are tri-stated when a reset condition becomes active, even if the clock is not running." Verstehe ich nicht ganz. Was ist MOS?
Winfried wrote: > Ich seh gar kein PINB, nur PORTB. Fürs einlesen brauchst du aber das > Register PINB. Ok, werde ich gleich ausprobieren.
Danke! Es tut sich was. Ich musste im Quellcode oben in den Definitionen PINB statt PORTB verwenden.
Und bei Eingängen auch PORTB passend beschreiben, um den internen Pullup ein- oder auszuschalten...
> Verstehe ich nicht ganz. Was ist MOS?
"Metal Oxide Semiconductor"
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.