Hallo, ich habe ein Problem mit meinem AD-Wandler. Ich wollte die 10 Bit auslesen und auf den Ports ausgeben. Also im unteren Code soll RegelspannungH ADCH ensprechen und RegelspannungL sollte ADCL entsprechen. Das Problem im ADCL steht nichts drin. Muss ich irgendwo bei der initialisierung auf 10 Bit stellen oder warum geht es nicht. uint16_t adcval; adcval = ReadChannel(2); RegelspannungH = (uint8_t)(ADC>>8); RegelspannungL = (uint8_t)(ADC<<8); if ((RegelspannungL & 0x01)== 1) PORTD |= (1<<6); else PORTD &= ~(1<<6); if ((RegelspannungL & 0x02)== 1) PORTD |= (1<<7); else PORTD &= ~(1<<7); PORTC = RegelspannungH;
>Ich habe gedacht damit frage ich das zweite Bit ab?
Im Prinzip schon, aber du machst das falsch.
0 == 1 ist FALSE
2 == 1 ist FALSE
Wie macht man es richtig?
Du kannst doch ADCH und ADCL getrennt einlesen. Was soll das mit & 0x01 und & 0x02 denn werden?
achso ich muss auf ungleich 0 abfragen if ((RegelspannungL & 0x02)!= 1) also so?
>achso ich muss auf ungleich 0 abfragen Richtig. >if ((RegelspannungL & 0x02)!= 1) >also so? Falsch. Warum programmierst du nicht das was du denkst;)
sorry != 0 so war es gemeint @Dirk: ja, aber mir wurde geraten beide Register erst in einer Variable zu speichern
>mir wurde geraten beide Register erst in einer Variable zu >speichern von wem? und warum?
Das ist Quatsch. Du musst immer beide Register auslesen und zwar in der richtigen Reihenfolge. Der Compiler macht's nicht anders, wenn Du den 16-Bit Wert ADC abfragst. Nur dass Du ihn dann halt umständlich wider in zwei 8-Bit Werte zerlegen musst.
>das Hauptproblem war ja das in ADCL nichts >steht das ist ganz sicher nicht so.
>adcval = ReadChannel(2); >RegelspannungH = (uint8_t)(ADC>>8); Wieso nimmst du eigentlich ADC? ReadChannel gibt dir doch adcval zurück.
Ich habe zum test ADCL auf PortC ausgeben, (ADCH auf PortC ging ohne Probleme) dann mit dem Oszi jeden Pin gemesen keine Änderungen alle bleiben auf 0.(ich habe natürlich die eingelesene Spannung verändert)
>Wieso nimmst du eigentlich ADC? >ReadChannel gibt dir doch adcval zurück. kein plan ich dachte das wäre das selbe
Peter schrieb: > RegelspannungL = (uint8_t)(ADC<<8); Wenn du deine 8 Lowbits nach links rausschiebst, kann da auch nichts drinstehen. RegelspannungL = (uint8_t)(ADC & 0xFF); mfg.
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.