Anfänger fragen zu Tiny 15 und Assembler

Gast #315532
Lesenswert?

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
Angehängte Dateien:
Gast #315535
Lesenswert?

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
#315536
Lesenswert?

> 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ß...

...
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren