Hallo, ich habe ein kleines Problem. Ich hab ein Programm in C geschrieben um einen ADC Wert auszulesen und an PortC habe ich mit Widerständen einen DA-Wandler aufgebaut. Das Programm schaltet also den Analogen Wert 1 zu 1 durch. Dazu habe ich nur eine 8 Bit Auflösung benutzt, jetzt würde ich gerne auf 10 Bit erhöhen. Dazu wollte ich noch PORTD PIN6 und PIN7 zum DA-Wandler dazu schalten. Jetzt die Frage: Wie krieg ich den inhalt von ADCL auf die zwei PINS? Bis jetzt habe ich einfach (ADCH = PORTC) benutzt. Schon mal danke für die Antworten die hoffentlich kommen. mfg peter
if bit in wert gleich eins setze ausgang ansosnten lösche ausgang das ganze für die beiden Bits.
Peter schrieb: > Jetzt die Frage: Wie krieg ich den inhalt von ADCL auf die zwei PINS? INdem du den ADC wie jeder andere über ADCW ausliest, dir also den 10-Bit Wert in eine uint16_t Variable holst. die untersten beiden Bits dieser Variable gibst du auf deinen D-Leitungen aus. Und für den Rest schiebst du in der Variablen alles um 2 Stelle nach rechts und gibst sie wie bisher aus.
nein, das ist soweit schon formuliert. Der Rest ist nachschauen bei Bitoperationen und if-Abfrage. Das lernst du selber :-)
Peter schrieb: > Kannst du das auch als Code beispiel angeben? Dein Codebeispiel beginnt damit, dass du dir aus dem AVR-GCC-Tutorial die ADC Funktionen holst und davon Abstand nimmst den ADC Wert direkt aus den ADC Registern auf die Ports klatschen zu wollen. Denn nur so klappt es dann auch mit zb einem Mittelwert über mehrere ADC Werte bzw irgendwelchen Umrechnungen des ADC Wertes.
@Karl hört sich gut an. Das Problem ist nur das ich in C ein absoluter Änfanger bin. Kannst du mir das auch als Code angeben?
Peter schrieb: > @Karl > hört sich gut an. Das Problem ist nur das ich in C ein absoluter > Änfanger bin. Kannst du mir das auch als Code angeben? Siehe AVR-GCC-Tutorial
Hier mal der von mir geschreibene Code, es funktioniert so nicht. if (ADCL = 0b0000001) PORTD |= (1 << PD6); else PORTD &= ~(1 << PD6); if (ADCL = 0b00000010) PORTD |= (1 << PD7); else PORTD &= ~(1 << PD7);
Peter schrieb: > Hier mal der von mir geschreibene Code, es funktioniert so nicht. > > if (ADCL = 0b0000001) Das sind Zuweisungen und keine Vergleiche ABfrage auf Gleichheit schreibt sich in C als == Ausserdem wird dein ADCL Register nicht den Wert 0b00000001 haben. Ist das wirklich so schwer, sich aus dem Tutorial die ADC Routinen zu holen und dann das Tut von Anfang an reinzuziehen und erst mal über Bitverarbeitung nachzulesen?
>jetzt würde ich gerne auf 10 Bit >erhöhen. Dazu wollte ich noch PORTD PIN6 und PIN7 zum DA-Wandler dazu >schalten. Zum Glück willst du die unteren Bits damit umschalten. PORTC und PORTD können nicht gleichzeitig gesetzt werden. Es geht zwar relativ schnell, aber beim umschalten der unteren Bits wird es zu so was wie Umschaltrauschen kommen. Ein kleiner Kondensator um 100pF am Ausgang vom DAC sollte das aber platt bekommen.
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.