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
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?
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?
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?
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
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.
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.
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
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
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 😀.
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 😁
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
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
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 ...
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.
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
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.
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
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.