Forum: Mikrocontroller und Digitale Elektronik Attiny26 PortD


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Far Z. (far_z)


Angehängte Dateien:

Bewertung
2 lesenswert
nicht lesenswert
Liebe Gemeinde,

was µC, Programmieren und Elektronik angeht bin ich absolutes Greenhorn. 
Nun habe ich ein bisschen Zeit gefunden mich damit auseinanderzusetzen 
und habe die AVR-Tutorials hier gefunden. Nachdem ich die HW für den 
Eigenbau nach der Anleitung hier bestellt habe, habe ich mich heute 
Morgen bereits darangesetzt um mit den Tutorials weiter zu machen. Nun 
habe ich aber folgendes Problem:
Als µC habe ich ein Attiny26-16PU von einem Kumpel bekommen. Für den 
ersten Versuch mit den 6 LED's (IO/Grundlagen) muss ich 4 Taster an 
PD0-PD3 anschließen, laut "pin config" im Attiny26 Datasheet, der hat 
gar keinen D-Port!
Habe ich den falschen µC oder kann ich irgendwas machen?
Gruß aus Dortmund

von Arduino Fanboy D. (ufuf)


Bewertung
-1 lesenswert
nicht lesenswert
Far Z. schrieb:
> Habe ich den falschen µC oder kann ich irgendwas machen?

Vielleicht.
Ja!

Gegenfrage:
Was kann PortD was Port B+A nicht kann?

von HildeK (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Far Z. schrieb:
> Habe ich den falschen µC oder kann ich irgendwas machen?

Ja, wenn du unbedingt PortD verwenden willst.
Aber du hast 7 Pins vom PortB und 8 Pins vom PortA. Die kann man genauso 
verwenden, man muss das natürlich in der Software auch anpassen.
Welches Beispiel hast du denn angeschaut?

von Christian S. (roehrenvorheizer)


Bewertung
0 lesenswert
nicht lesenswert
Nimm halt PA0 .... PA3 für die Taster.


mfG

von Peter D. (peda)


Bewertung
-1 lesenswert
nicht lesenswert
Far Z. schrieb:
> laut "pin config" im Attiny26 Datasheet, der hat
> gar keinen D-Port!

Das ist in der Tat ein großes Problem. Du öffnest den Quelltext in einem 
Editor, gehst in die Ersetzen Funktion und ersetzt "PIND" durch "PINA" 
usw.
War das so schwer?

von Martin V. (oldmax)


Bewertung
2 lesenswert
nicht lesenswert
Hi
Ja, vermutlich ist das schwer, weil der TO ein absolutes Greenhorn, 
sprich Anfänger ist und überhaupt keine Ahnung von der Konfiguration der 
IO-Ebene hat. Da nutzen eure Antworten nicht viel.

Far Z. schrieb:
> Habe ich den falschen µC oder kann ich irgendwas machen?

Für das Beispiel hast du den falschen µC, aber das ist nicht schlimm. 
Was du tun mußt, ist die IO-Ebene entsprechend umkonfigurieren und 
entsprechend einen vorhandenen Port benutzen. Ich kenne deine Quelle 
nicht, willst du in "C" oder Assembler programmieren? Es ist ein wenig 
müßig für mich, herauszufinden, wo dein Programm geändert werden muß. 
Klar, du kannst die Hardware einfach an einen anderen Port klemmen, aber 
davon weiß der Controller nix, das mußt du ihmm schon erzählen und das 
heißt "programmieren". Du fängst erst an? Ok, die Hardware zusammen zu 
bruzeln ist wohl nicht das Problem. Dann schau, was im Tutorial zur 
Konfiguration der IO steht.
In ASM sollte das in etwa so aussehen:
  ldi r16, 0xFF       ; lade Arbeitsregister r16 mit der Konstanten 0xFF
Die Konstante "FF" ist nichts anderes, wie ein Byte mit lauter "1"en. 
Also, es könnte genau so da stehen
  LDI r16, 0b11111111
Diesen Wert schaufeln wir nun über das r16- Register in das Data 
Direction Registr B und bedeutet, der Port B wird zum Ausgang 
parametriert. Der Weg über r16 ist erforderlich, weil das "DDRB"- 
Register nicht direkt angesprochen werden kann.
         out DDRB, r16       ; Inhalt von r16 ins IO-Register DDRB 
ausgeben
Auch der Port B ist nicht direkt beschreibbar, daher auch hier der Umweg 
über r16. Diesmal hat der Autor gleich die binäre Schreibweise gewählt.
         ldi r16, 0b11111100 ; 0b11111100 in r16 laden
         out PORTB, r16      ; r16 ins IO-Register PORTB ausgeben
Demnach ist
PB0 = "0"
PB1 = "0"
Alle anderen Portpins von PB2 bis PB7  auf "1"
Um nun einen Taster einzulesen, muß der Port auf Eingang parametriert 
werden. In der Regel ist er das von Hause aus im Neuzustand. Aber auch 
hier sollte man grundsätzlich die Parametrierung vornehmen. Dazu muß das 
DDRB- Register mit den entsprechenden IO-Pins auf "0" gesetzt werden.
Eine
 CLR r16
 Out DDRA, r16
Befehlsfolge setzt Port A beispielsweise auf Eingang. Übrigends, CLR r16 
ist das selbe wie LDI r16, 0b00000000
Damit die Portpins bei einem offenen Schalter nicht in der "Luft" 
hängen, also keinerlei Potentialbindung haben, müssen die Eingänge über 
Widerstände an ein Potential gehängt werden. Intern kann man dies mit
  LDI r16. 0b11111111
  OUT PortA, r16
machen. Dabei werden Pull-Up widerstände zugeschaltet und der externe 
Schalter muß nach GND schließen. (Pull-Up -Widerstand nach VCC, 
Pull-Down - Widerstand nach GND)
Man kann hier schnell noch ein Tutorial zu einem Tutorial schreiben.
Wenn du da wirklich einsteigen möchtest, dann kann ich dir empfehlen, 
mal bei Makerconnekt in die Rubrik "FAQ" zu schauen und z. B. den 
Beitrag "Keine Angst vor Assembler" oder
Veröffentlichung "PC und µC-Programmieren in VB und Assembler" 
(Lehrbuch) zu lesen. Letzteres hilft dir, das Programmieren zu verstehen 
und führt dich Schrittweise zuerst in VB ein. Du erstellst ein Programm, 
welches mit einem Controller kommuniziert und ir die internen Werte zur 
Laufzeit liefert. Der zweite Teil befaßt sich dann mit einem µC, wobei 
prinzipiell auch ein ATTiny programmiert werden kann. Allerdings scheint 
er keinen internen USART, sprich RxD und TxD (RS232 Schnittstelle) zu 
haben.
Ok, ich hab mal wieder ein bischen REklame für mein Buch gemacht, aber 
ich verdien da nix dran, das ist komplett kostenlos. Ich freu mich nur, 
wenn mal eine Rückmeldung kommt, das es hilfreich war und den Einstieg 
ermöglicht hat.
Gruß oldmax

von Georg M. (g_m)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Port D

von Peter D. (peda)


Bewertung
2 lesenswert
nicht lesenswert
Martin V. schrieb:
> Übrigends, CLR r16
> ist das selbe wie LDI r16, 0b00000000

Nein, ist es nicht.
LDI läßt die Flags der vorherigen Befehle unverändert. CLI ändert Z,N,V.

von Walter T. (nicolas)


Bewertung
1 lesenswert
nicht lesenswert
BTW: Ich würde zusehen, zum Lernen genau den Mikrocontroller zu 
verwenden, für den auch die Codebeispiele gedacht sind. Ansonsten ist 
das sehr frustrierend. Ich habe damals den Fehler gemacht, nach einem 
Buch, dass den ATmega16 verwendet zu lernen, aber "nur" einen ATmega168 
da gehabt. Ungefähr die Häfte aller Register heisst anders. Irgendwann 
gewöhnt man sich daran, aber für den Anfang ist das lästig.

von Martin V. (oldmax)


Bewertung
0 lesenswert
nicht lesenswert
Hi
Peter D. schrieb:
> Nein, ist es nicht.
> LDI läßt die Flags der vorherigen Befehle unverändert. CLI ändert Z,N,V.

Richtig, aber in diesem Zusammenhang (noch) nicht wichtig. Ich wollte 
einem Anfänger nicht gleich zu viel von diesen Dingen um die Ohren 
hauen, denn er hat ja schon Probleme genug.
Gruß oldmax

von Far Z. (far_z)


Bewertung
0 lesenswert
nicht lesenswert
Tachchen,
als allererstes vielen Dank für die (zum Teil noch verwirrenderen) 
Antworten.
Wie gesagt, ich bin absoluter Anfänger und komme mit vielen Begriffen 
und Abkürzungen nicht klar! Möchte hier niemandem auf den Zeiger gehen, 
hatte aber seit Jahren Interesse und habe jetzt dank Corona die Zeit 
gefunden mich endlich damit beschäftigen.

Arduino Fanboy D. schrieb:
> Gegenfrage:
> Was kann PortD was Port B+A nicht kann?
Das weiß ich noch net!

HildeK schrieb:
> Ja, wenn du unbedingt PortD verwenden willst.
> Aber du hast 7 Pins vom PortB und 8 Pins vom PortA. Die kann man genauso
> verwenden, man muss das natürlich in der Software auch anpassen.
> Welches Beispiel hast du denn angeschaut?
PD muss ich nicht unbedingt haben. Ich werde versuchen im Programm PD 
durch PA oder PB ersetzen. Das Beispiel ist: 
"AVR-Tutorial:_IO-Grundlagen"

Peter D. schrieb:
> War das so schwer?
Soweit bin ich noch nicht, aber alles ist schwerer wenn Man keine Ahnung 
hat!

Martin V. schrieb:
> Da nutzen eure Antworten nicht viel.
Genau Richtig.
Da ich Anfänger bin und die HW und SW systematisch verstehen möchte, 
werde ich in Assembler programmieren.
Arbeitsregister? DDRB? Muss vorerst nicht erklärt werden. Werde 
versuchen selber herauszufinden. Habe z.Z. andere Schwierigkeiten!

Martin V. schrieb:
> Übrigends, CLR r16 ist das selbe wie LDI r16
Ammoklauf! Aber vielen dank für die detaillierte Antwort.

Challenge accepted

von HildeK (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Far Z. schrieb:
> PD muss ich nicht unbedingt haben. Ich werde versuchen im Programm PD
> durch PA oder PB ersetzen. Das Beispiel ist:
> "AVR-Tutorial:_IO-Grundlagen"

Ok, Assembler, meinetwegen. Aber in C ist es dasselbe; das hätte ich dir 
empfohlen. Dazu gibt es Infos im AVR-GCC-Tutorial.

Es ist einfach:
Ersetze DDRD durch DDRA oder DDRB.
Ersetze PORTD durch PORTA oder PORTB.
Ersetze PIND durch PINA oder PINB.

Aber es werden auch einige Register (Timer, ADC, usw.) anders heißen und 
andere Sonderfunktionen implementiert sein bei einem Tausch des 
Prozessors. Der Aufwand zum Anpassen dann etwas größer sein.

Far Z. schrieb:
> Da ich Anfänger bin und die HW und SW systematisch verstehen möchte,
> werde ich in Assembler programmieren.

Manche sagen, es hilft beim Verständnis. Andererseits verwendet man viel 
Gehirnschmalz in die Detailabläufe, die imho in C viel einfacher und 
übersichtlicher darstellbar sind.
Ich hätte µC-Programmieren schnell wieder aufgegeben, wenn ich es nur in 
ASM hätte tun können 😀.

von Etappensieger der Tour de Frongs (Gast)


Bewertung
0 lesenswert
nicht lesenswert
HildeK schrieb:


> Ich hätte µC-Programmieren schnell wieder aufgegeben, wenn ich es nur in
> ASM hätte tun können 😀.

...und ich, wenn ich es in C hätte tun müsssen

😁

von Martin V. (oldmax)


Bewertung
0 lesenswert
nicht lesenswert
Hi
Kloppt euch nicht wieder wegen der Sprache. Alles ist erlernbar. Ich 
bevorzuge auch Assembler und finde das auch gar nicht so schwer. "C" ist 
mir bis heute nicht gelungen, irgend etwas zu verstehen. Basic und 
Pascal, kein Problem, aber "C" ....
Nun gut, ich brauch das auch nicht mehr. Mit 70 stellt mich sowieso 
keiner mehr ein.
😎
Was ihr auch immer bevorzugt, wenn ihr es könnt, spricht nix dagegen.
Gruß oldmax

: Bearbeitet durch User
von Ein Freund (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
Far Z. schrieb:
> Nachdem ich die HW für den
> Eigenbau nach der Anleitung hier bestellt habe,

Welche?

Far Z. schrieb:
> Als µC habe ich ein Attiny26-16PU von einem Kumpel bekommen.

Dazu sollte man erstmal das Datenblatt ("Datasheet") durchlesen und 
halbwegs verstehen - dann kann man

Far Z. schrieb:
> die HW und SW systematisch verstehen

von HildeK (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Martin V. schrieb:
> Kloppt euch nicht wieder wegen der Sprache.

Wir 'kloppen' uns nicht! Devinitiv nicht.
Ich hab nur meine Präferenzen genannt.

Da ich kaum jünger bin als du, geht es mir  mit ASM genau so wie dir mit 
C ...

von Arduino Fanboy D. (ufuf)


Bewertung
-1 lesenswert
nicht lesenswert
Far Z. schrieb:
> Arduino Fanboy D. schrieb:
>> Gegenfrage:
>> Was kann PortD was Port B+A nicht kann?
> Das weiß ich noch net!

Das war keine Frage, welche du mir beantworten sollst.
Sondern ein Wink mit dem Zaunpfahl, an dem ein ganzer Zaun, samt Garage 
und Nachbars Hund, dranhängt.

von Martin V. (oldmax)


Bewertung
0 lesenswert
nicht lesenswert
Hi
HildeK schrieb:
> Da ich kaum jünger bin als du, geht es mir  mit ASM genau so wie dir mit
> C ...

Ja, ja... das Alter....
gruß oldmax

von Peter D. (peda)


Bewertung
1 lesenswert
nicht lesenswert
Far Z. schrieb:
> Wie gesagt, ich bin absoluter Anfänger und komme mit vielen Begriffen
> und Abkürzungen nicht klar!

Vieles von diesem "Fachchinesisch" findest Du im Datenblatt unter 
"Register Summary" und weiterführende Beschreibungen unter den 
angegebenen Seitenzahlen.

In der Regel sind alle Portpins als IOs verwendbar, d.h. austauschbar. 
Nur die alternativen Funktionen sind an bestimmte Pins gebunden.

von Bernd S. (Firma: Anscheinend Corner-Cases ;-)) (bernd_stein)


Angehängte Dateien:

Bewertung
-1 lesenswert
nicht lesenswert
Far Z. schrieb:
> Liebe Gemeinde,
>
> was µC, Programmieren und Elektronik angeht bin ich absolutes Greenhorn.
> Nun habe ich ein bisschen Zeit gefunden mich damit auseinanderzusetzen
> und habe die AVR-Tutorials hier gefunden.
>
Hallo,

freue mich einen neuen AVR8-Assembler Programmierer begrüßen zu können 
und hoffe das du wirklich lange genug dabei bleibst.

Ui, jui, jui, ganz schön viele Berge hast du da zu erklimmen und das mit 
ein bischen Zeit ;-)

Ich bin hier so etwas wie der ewige AVR8ASM-Student.
Ich rate dir aus meiner Erfahrung hier im Forum, das du dich so wenig 
wie möglich meldest, denn wie du sicherlich bemerkt hast sind viele nur 
Selbstdarsteller. Andere haben ganz vergessen wie es zu Anfang war. 
Wiederum Andere haben dies beruflich erlernt und weitere zu einer Zeit 
wo es noch nicht diesen www-Dschungel gab. Das heißt die hatten ein 
teures Buch und nichts anderes also dementsprechend dies 
durchgearbeitet. Nicht so wie heute - guck mal hier, guck mal da, das 
ist einfacher, das ist besser, damit geht es schneller, ...

Es sind hier nur wenige die dir wirklich bei AVR8ASM weiterhelfen 
werden.
Ich freu mich schon auf die Berwertungen, die mir dies immer wieder 
bestätigen.

Ich kann dir nur empfehlen dies hier ( siehe Anhang ) konsequent 
durchzuarbeiten. Nichts auslassen oder anders zu machen. Wenn es mal 
nicht weiter geht, einfach 2-3 Tage was anderes machen, aber nicht 
länger. Manchmal wundert man sich dann nur und weiß gar nicht wo 
eigentlich das Problem lag. Falls du dann doch nicht weiterkommst, 
schreibe erstmal den Autor an, dann würde ich es parallel hier versuchen 
:

https://www.roboternetz.de/community/forums/56-Assembler-Programmierung

und erst zum Schluß hier im Forum.

Der Mann programmiert sicherlich schon Jahrzehnte Assembler und hat erst 
2018 dieses PDF überarbeitet. Nur leider hat er von nur einem einzigen 
vorher Feedback erhalten und demensprechend das PDF überarbeiten können.

Der Vorteil ist auch, das du bei deinen Problemen die Seitenzahl, 
Kapitel und per Copy/Paste, den dir unverständlichen Teil, posten 
kannst.
Von Vorteil ist, falls du hier einen Thread zu AVR-Asssembler aufmachst, 
das du einen Index wie [ASM], AVR8ASM, AVR-Assembler in der 
Threadüberschrift anfügst, denn es gibt auch andere Assemblersprachen 
für 32-Bit µC, die auch AVR bzw. Mircochip bietet, aber der Assembler 
ist ein ganz anderer oder PIC oder ...


Hier vorab noch etwas zu dem bisher gesagtem:

http://www.avr-asm-tutorial.net/avr_de/beginner/asm_beginner.html


Hier noch was zur Motivation :

http://www.avr-asm-tutorial.net/avr_de/beginner/index.html

Und nicht von der Seitenzahl abschrecken lassen, es wird halt detailiert 
erklärt in Wort und Bild.


Bernd_Stein

: Bearbeitet durch User

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]
  • [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.

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