mikrocontroller.net

Forum: Compiler & IDEs ADC, _delay_ms(), 16bit->8bit


Autor: grsi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
Ich hab auf dieser Seite das AVR-GCC-Tutorial gelesen, wobei drei kleine 
Fragen aufgetaucht sind:

1. zu den ADC: Die Integrierten ADC messen ja Spannungen. Wenn ich nun 
den Widerstand eines Phototransistors messen will, wie stelle ich das am 
besten an?
Bei einer Serieschaltung von einem Widerstand und dem Phototransistor 
die Spannung über dem Widerstand messen? oder ist es geschickter die im 
Tutorial beschriebene Methode fürs messen ohne ADC zu verwenden?

Ist es Ratsam als externe Referenzspannung die AVCC zu benutzen?

2. zur Fkt _delay_ms();
Wenn ichs richtig verstanden hab, so macht der Microcontroller bei 
dieser Fkt einfach während einer gewissen Zeit nix. Man könnte damit 
bspweise eine Impulsfkt schreiben, die erst den Ausgangspin auf 1 setzt, 
einige Sekunden wartet, und ihn dann auf 0 setzt.
Oder man könnte sie nutzen um zB alle 100ms einen Messwert abzulesen. 
komm ich da mit dem Watchdog in Konflikt?

Ist dies eine gute Idee? oder gibts da bessere Methoden?


3. Kann ich in C wie bei C++ mit dem Shiftoperator ">>" bits 
'abschneiden'? und ist es möglich einem uint8_t ein uint16_t Wert 
zuzuweisen, wenn ja, welche bits werden dabei übernommen?
Konkret will ich ein 10bit Messwert in einen 7bit oder 6bit runden und 
dabei auch noch Speicher sparen.


Gruss Grsi

Autor: Marco Beffa (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1. Also das kommt darauf an wie stark die Änderungen deines 
Fotowiderstandes sind. evt. könntest (must) du noch was verstärken 
z.b.mit nem OP... am besten rechnest du mal ein wenig und probierst 
dann...

Wenn AVCC bei dir sauber und stabil ist, kein Problem.

2. Der Watchdog resetet deine Controller einfach immer wenn er nicht 
rechtzeitig zurück gesetzt wird. Ich denke das reicht dir als Erklärung.

3. Ja das ist möglich. Meiner Meinung nach werden da einfach Nullen 
reingeschoben und auf der Anderen seite Bits rausgeschoben (die sind 
dann weg). Es werden die unteren 8 Bit des uint16 Types genommen.


Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ist dies eine gute Idee?

Liest du dir denn auch die Doku durch?  Zweiter Absatz der Doku zu
<util/delay.h>:

``In general, for long delays, the use of hardware timers is much
preferrable, as they free the CPU, and allow for concurrent processing
of other events while the timer is running. However, in particular for
very short delays, the overhead of setting up a hardware timer is too
much compared to the overall delay time.''

Das sollte dir alles sagen.

Übrigens gibt's für die Bitschieberei (ein halbes Mal darfst du raten,
aus welcher Sprache C++ den >>-Operator geerbt hat :) beim ADC noch
einen netten Trick: wenn du das 10-Bit-Ergebnis auf ein 8-Bit-Ergebnis
runden willst, kannst du bei allen neueren AVRs das Bit ADLAR (ADC
left-adjust result) setzen.  Dann wird das Ergebnis linksbündig ins
ADC-Doppelregister eingetragen, d. h. das Register ADCH enthält die 8
most significant bits.  Die Schieberei wird also hier gleich von der
Hardware erledigt, und in der Software liest du einfach nur ADCH statt
ADCW aus.

Autor: Wolfram (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ich hab auf dieser Seite das AVR-GCC-Tutorial gelesen, wobei drei kleine
>Fragen aufgetaucht sind:
Das sind keine "kleinen" Fragen, die du stellst, sondern es zeigt große 
Wissenlücken auf. Tu Dir selbst einen Gefallen und lies ein Buch zu 
Grundlagen der Elektrotechnik/Elektronik und zu C.
Alles andere wird dich in eine Sackgasse führen.

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ist es Ratsam als externe Referenzspannung die AVCC zu benutzen?
Bei allen aktuellen AVRs ist AVCC als Referenzspannung intern 
auswählbar. Schließe nicht AVCC an AREF an, das kann zu Problemen führen 
und macht auch keinen Sinn. Einzige Ausnahme: Wenn Du noch mit den alten 
AT90Sxxxx-Controllern arbeitest. Die brauchen noch generell eine externe 
Referenz an AREF.

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.