Hi, wir benötigen dringend Hilfe. Unsere Aufgabenstellung lautet: "Es soll ein Spannungspegel über einen A/D-Wandler eingelesen werden. Der Spannungspegel wird über das Potenziometer (Spannungsteiler) eingestellt. Der gewandelte Wert wird als Analogwert über den 8 bit D/A-Wandler ausgegeben. Der A/D-Wandler soll jedes mal durch den Timer0-Überlauf aktiviert werden (Interrupt) und eine Wandlungsrate von ca. 100 Hz haben." Wir sollen einen ATtiny817 mit Assembler programmieren. Kann uns hierbei jemand weiterhelfen? Vielen Dank
https://www.microchip.com/webdoc/avrassembler/avrassembler.wb_instruction_list.html https://www.microchip.com/wwwproducts/en/ATtiny817
> Kann uns hierbei jemand weiterhelfen?
Ja, viele können das.
Wobei brauchst du denn konkret Hilfe? Jetzt sag nicht "bei allem", sonst
fangen wir damit an, deinen PC in Betrieb zu nehmen und Englisch zu
lernen.
@ Max Ich fürchte, dass wird wieder einer dieser Threads. :-) Zunächst mal, ist das für Euch vielleicht "dringend". Für uns nicht. Dann fangen wir nicht an, ausgehend von einer Aufgabenstellung die Programmierung an sich, das programmieren in Assembler und noch die Konfiguration der Peripherie zu erklären. Das Programmieren an sich, sollte an so einem Punkt bzgl. Basisdingen klar sein. Sonst ist es sinnlos so eine Aufgabe zu stellen. Programmieren in Assembler bedeutet, sich mit dem Befehlssatz auseinander zu setzen und das was man an Programmierkenntnissen hat anhand einfacher Beispiele eben in Assembler auszudrücken. Mal zwei lange Zahlen addieren. Eine Schleife bauen etcpp. Ein Ergebnis in einer Variablen speichern. Die Konfiguration der Peripherie setzt voraus, dass man eine grundlegende Idee von der benötigten Peripherie hat. Also: Was ist und tut so ein AD-Wandler? Was ist und tut ein DA-Wandler? Dann liest man sich die entsprechenden Kapitel im Datenblatt durch und ist erst einmal verwirrst, weil man da soviel einstellen kann bzw. muss. Das ist normal. Geht jedem so. Dann überlegt man sich, welche von den möglichen Einstellungen man eigentlich benötigt. Das ergibt sich aus der Aufgabenstellung (sollte jedenfalls so sein). Das versucht man dann im den Einstellungen wieder zu finden (man hat ja vorher alles gelesen um einen Überblick zu haben). Oder man geht die Einstellungen Punkt für Punkt durch und überlegt dabei, was man davon braucht. Dann schreibt man Code, der diese Einstellungen setzt und guckt, was dabei herauskommt. Dazu kann man dann hier auch gezielte Fragen stellen. Das wäre mal ein schöner Thread. Meiner Meinung nach. :-)
Leider habe ich kaum Erfahrung im Programmieren. Ich habe folgendes aus dem Datenblatt rausgelesen... ldi r16,0b00000001 sts ADC_CTRLA_offset,r16 ldi r16,0b00000001 sts ADC_CTRLC_offset,r16 ldi r16,0b00000101 sts ADC_MUXPOS_offset,r16 ldi r16,0b00000001 sts ADC_INTCTRL_offset,r16 ldi r16,0b01000001 sts DAC_CTRLA_offset,r16 ldi r16,0b00000011 sts VREF_DAC0REFSEL_4V34_gc,r16 ldi tmp0,0b00001011 sts TCA0_SINGLE_CTRLA,tmp0 ldi tmp0,0b00000001 sts TCA0_SINGLE_INTCTRL,tmp0 ldi tmp0,0xb4 ldi tmp1,0x64 sts TCA0_SINGLE_PER,tmp0 sts TCA0_SINGLE_PER+1,tmp1 sei Ich komm hier nicht weiter, da ich nicht weiß, wie man die Befehle richtig anwendet.
Dann fangen wir mal ganz unten mit einem Assembler Grundkurs an. http://stefanfrings.de/avr_workshop/index.html
das sieht mehr bruchstückhaft zusammenkopiert als selber geschrieben aus, einmal r16, dann tmp0/1, Register nicht definiert, Konfiguration über Binärzahlen ist auch nicht so schön (dafür gibts vordefinierte Namen, dann wirds leserlich, die passende .inc (in atmel studio) braucht man sowieso) und ich bin mir ziemlich sicher das sts nicht genommen wird um Register zu schreiben (sollte "out" sein), außer das wurde beim 817 geändert. außerdem reicht der Offset denke ich nicht, da muss noch die base Adresse hinzu. Stefanus F. schrieb: > Dann fangen wir mal ganz unten mit einem Assembler Grundkurs an. das wird die einzige Möglichkeit, außer jemand schreibt euch das ganze schnell runter, aber auch richtig geschrieben sollte das Minimalprogramm nur ca. 50-100 Zeilen haben. außerdem den Hinweis zur Foramtierung lesen, dann wirds schöner für alle, z.B. so bei atmel studio 7 tn817def.inc einbinden, alles ohne Gewähr, kenn die neuen Attiny noch nicht so gut
1 | .DEF tmp = r16 |
2 | |
3 | ldi tmp, ADC_PRESC_DIV4_gc oder |
4 | ldi tmp, (1 << ADC_PRESC1_bp) |
5 | out (ADC0_base + ADC_CTRLC_offset), tmp |
Max schrieb: > Leider habe ich kaum Erfahrung im Programmieren. Nun. Du wirst die Erfahrung bekommen. Da kannst Du ganz zuversichtlich sein. Das klappt schon. > Ich habe folgendes aus dem Datenblatt rausgelesen... > [...] Da wäre es, zum nachvollziehen und späteren überprüfen, nützlich, wenn Du die Namen der Bits aus dem Datenblatt, die auch so in der Datei tn817def.inc deklariert sind, verwendest. Es erfordert einen gedanklichen Zwischenschritt aus dieser Kombination mit dem Datenblatt die Bedeutung des Bits zu ermitteln. Umgekehrt musst Du das beim schreiben ohnehin tun (also von der Bedeutung des Bits zu dessen Namen). Den Schritt vom Bit zum Namen nochmals zu tun, kannst Du Dir (und mir resp. uns) ersparen. Das kostet Zeit und Energie. Ausserdem wäre es sehr nützlich, wenn Du Kommentare hinzufügst und gesondert einen Text mit Skizzen schreibst. Du solltest beschreiben, was Du mit den einzelnen Bits bewirkst. Das ergibt sich aus der von mir oben erwähnten Lektüre der Beschreibung des AD-Wandlers bzw. des DA-Wandlers. Es wäre auch besser, wenn Du zunächst mal den AD-Wandler als Ganzes betrachtest. Es gibt verschiedene Skizzen und Blockschaltbilder im Datenblatt dazu. Das kannst Du ja mal ausdrucken oder auf sonst einem Weg aus dem Datenblatt extrahieren und darin markieren, welchen Weg das Analogsignal nehmen soll und welchen das digitale Wandlungsergebnis und was es da noch so einzustellen gibt. Die Konfigurationsbits ergeben sich daraus. Das kannst Du auch gut in dem Bild notieren. Auf diese Weise kannst Du Dich Stück für Stück systematisch vorarbeiten und sicher sein, dass Du alles bedacht hast. Ich habe mal das Bild vom AD-Wandler angehängt. Aber es gibt noch andere Bilder, die nützlich sein können. > Ich komm hier nicht weiter, da ich nicht weiß, wie man die Befehle > richtig anwendet. Das wirst Du sicher lernen, wenn Du es nur versuchen willst. Ich werde Dir hier nicht jeden Befehl im einzelnen erklären und wie er mit einer einem abstrakten oder auch umgangssprachlichen Beschreibung eines Programmes zusammen hängt. Nur zwei kleine Beispiele: Wenn Du etwa sagst, Du möchtest zwei Zahlen addieren, dann findest Du relativ leicht den Befehl ADD in verschiedenen Varianten. Oder wenn Du, abhängig von einer Bedingung, den Programmablauf beeinflussen willst, findest Du die verschiedenen Branch-Befehle. Mehr will ich aber dazu nicht sagen. Eine spezielle Frage, zu einem Detailpunkt, werde ich, oder jemand anders hier, beantworten. In einem gewissen Maß auch Fragen, die sich aus den Übersetzungen aus dem Englischen ergeben. Aber ich gebe hier keinen Unterricht. Dazu ist das Thema zu umfangreich.
Max schrieb: > Wir sollen einen ATtiny817 mit Assembler programmieren. > Kann uns hierbei jemand weiterhelfen? Eine Möglichkeit wäre das AVR Tutorial hier durchzuarbeiten https://www.mikrocontroller.net/articles/AVR-Tutorial Insbesondere https://www.mikrocontroller.net/articles/AVR-Tutorial:_ADC Das Tutorial ist aber für den ATmega8, d.h. Ihr braucht auch das Datenblatt zum ATtiny817 http://ww1.microchip.com/downloads/en/DeviceDoc/40001901B.pdf
Das gemeine daran ist, dass es für diese "neuen" ATtiny Modelle (vermutlich) noch keine Tutorials gibt, von denen man einfach kopieren könnte.
Muss aber ehrlich sagen das die neuen Datenblätter für so etwas absoluter Schrott sind, da braucht man ewig um was zu finden, es geht einfach im Textbrei unter.
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.