Guten abend, ich bin gerade dabei einen Tiny15 zu programmieren. Leider habe ich nicht all zu viele Erfahrungen mit Assembler. Ich möchte vom AD Kanal 3 eine Spannung messen und diese als Frequenz am Ausgang PB1 ausgeben. Dabei soll zuerst der Ausgang PB1 für 500ms eingeschaltet werden und dann wieder aus. Wenn der aus ist dann soll der AD Wert als Frequenz ausgegeben werden. Wenn das fertig ist, dann geht das wieder von vorn los. Nun habe ich ein paar Fragen: Habe ich den AD Kanal richtig gewählt? (0x03) Wie bekomme ich eine Pause hin? Wie kann ich den AD Wert ausgeben? Kann man das als PWM machen? Danke und Gruß Steffen
So wird das eher nix... Das hier http://www.hanneslux.de/avr/divers/index.html wird deine Aufgabe zwar auch nicht erfüllen, aber es wird dir sicher Hinweise geben können, wie du es besser machen kannst. Denn da werden Frequenzen erzeugt, Pausen eingehalten und in einer Version auch ADC eingelesen. Du wirst allerdings etwas Geduld benötigen. ...
naja aber irgendwo muß ich ja anfangen :-) Ich werd das mal morgen testen und dann mal sehn wie ich das mache. Besten dank erstmal. Gruß Steffen
Hallo, ich kappier das nicht. Kann mir jemand mal sagen wie ich zu erst einmal eine Ausgang ein und nach gewisser Zeit wieder aus bekomme? Wie ein Blinken halt? Ich komm mit den ganzen Abkürzungen und Befehlen nicht klar. Noch dazu ist mein Englisch nicht so gut das ich das Datenblatt verstehe. Und dann wäre ich sehr dankbar, wenn mir mal jemand mal verständlich und vielleicht mit einem Schnipdel Code das lesen von einem AD Wert erklärt und wie ich den in eine Variable bekomme. Ich mach hier schon seit Tagen rum aber irgednwie kappier ich das nicht. Das was ich da als Code gefunden habe, damit kann ich irgendwie nichts anfangen da es Seiteweise irgedwelche Befehle sind. Ich den das das ganz einfach ist, wenn man mal ein bissel Code hat der funktioniert. Danke und Gruß Steffen
> Und dann wäre ich sehr dankbar, wenn mir mal > jemand mal verständlich und vielleicht mit einem Schnipdel Code das > lesen von einem AD Wert erklärt und wie ich den in eine Variable > bekomme. Nehmen wir an, die Variable wäre das Register r16 und hieße 'temp'. Dann liest du mit
1 | in temp,adch |
den momentanen Wert des ADC in die Variable temp ein. Das Dumme ist nur, dass du dem ADC vorher sagen musst, welches Signal er wandeln soll und was er als Referenz nehmen soll. Also schau dir das Register 'admux' im I/O-Bereich an, da gibt es Bits für die Referenzquelle, die Messquelle und einen Schalter (adlar) mit dem du festlegen kannst, ob das 10-Bit-Ergebnis im 16-Bit-Registerpaar 'adch:adcl' rechtsbündig oder linksbündig justiert werden soll. Benötigt man nur 8 Bit Auflösung, dann justiert man links (adlar gesetzt) und liest nur adch aus. Dann muss der ADC auch noch eingeschaltet werden. Dazu gibt es das Register 'adcr'. In der ersten 'Verständnis-Stufe' schaltet man den ADC erstmal auf Dauerbetrieb. Dazu setzt man die Bits - aden (Einschalten) - adsc (Starten) - adfr (Free Run, Dauerlauf) und die Bits für einen geeigneten Vorteiler. Dabei soll der ADC einen Takt von etwa 50kHz..200kHz bekommen. Der Tiny15 läuft (wenn er kalibriert wurde) mit 1,6MHz. Um auf 100kHz ADC-Takt zu kommen braucht man Vorteiler 1:16. Aber was schreibe ich das hier eigentlich alles nochmal? Analysiere doch einfach mal das Programm im Anhang, da sind etliche Dinge erklärt, auch wie man sich diverse erforderliche Daten aus dem Datenblatt holt. Zu jedem ASM-Befehl gibt es einen Kommentar, teils mit Verweis auf betreffende Stellen im Datenblatt. Das Programm liest 2 Potis per ADC ein, liest einen Taster ein und steuert 2 LEDs, die nach einer bestimmten (einstellbaren) Zeit wieder ausgehen. Um die einzelnen Bits zu verstehen, ist nur minimales Englisch erforderlich. Ich kann auch kein Englisch und kämpfe mich mit einem Wörterbuch durch die Datenblätter, was ich inzwischen immer seltener brauche. Das Datenblatt ist ein absolutes Muss, ohne diese Informationen wirst du in keiner Programmiersprache zu einem befriedigenden Ergebnis kommen. Also viel Spaß... ...
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.