mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Anfänger fragen zu Tiny 15 und Assembler


Autor: Steffen (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

...

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hannes Lux (hannes)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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
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ß...

...

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

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