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