www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Wo ist der Stackpointer des Tiny12?!


Autor: Maxim S. (maxim) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Thomas W. (thomasw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin!

Der Tiny12 hat kein SRAM.

MfG

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

schon mal ins Datenbeltt geschaut? Der Tiny12 hat keinen internen Ram...
Dazu gibt es einen kleinen Hardware-Stack.

Gruß aus Berlin
Michael

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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".

Autor: Maxim S. (maxim) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich war etwas irritiert, weil im Blockschaltbild "STACK POINTER" auf 
"HARDWARE STACK" zeigt.

Der kann sich scheinbar nur drei Subroutinenaufrufe merken. Naja, sollte 
reichen ...

Autor: Maxim S. (maxim) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Winfried (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kein Problem, außer Reset kannst du alle Pins benutzen. Zeig mal deinen 
Code...

(Reset geht natürlich unter gewissen Umständen auch...)

Autor: Maxim S. (maxim) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Da ist nur das Wesentliche drin, da zu Testzwecken die anderen Routinen 
eh nicht benötigt werden. -> Anhang

Autor: Maxim S. (maxim) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ups. Hier ist die richtige Datei.

Autor: Winfried (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich seh gar kein PINB, nur PORTB. Fürs einlesen brauchst du aber das 
Register PINB.

Autor: Maxim S. (maxim) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Maxim S. (maxim) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Winfried wrote:
> Ich seh gar kein PINB, nur PORTB. Fürs einlesen brauchst du aber das
> Register PINB.

Ok, werde ich gleich ausprobieren.

Autor: Maxim S. (maxim) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke! Es tut sich was. Ich musste im Quellcode oben in den Definitionen 
PINB statt PORTB verwenden.

Autor: Winfried (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und bei Eingängen auch PORTB passend beschreiben, um den internen Pullup 
ein- oder auszuschalten...

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Verstehe ich nicht ganz. Was ist MOS?

"Metal Oxide Semiconductor"

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ohne MOS nix LOS. ;-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.