Ohne mir den generierten Code anzugucken, würde ich mal vermuten, dass
der Typecast nach (char) kompletter Unsinn ist. Er limitiert das
Ergebnis von "output * 1023" auf 8 Bits, die noch dazu (falls du nicht
-funsigned-char benutzt) vorzeichenbehaftet interpretiert werden.
Die anschließende Division durch 2.56 wandelt das dann wieder in
eine Gleitkommazahl um.
Wenn schon, dann:
1 | da = (uint8_t)((output * 1023) / 2.56);
|
Da aber DACH ohnehin vom Typ uint8_t ist, kannst du dir das auch
genauso gut schenken und gleich schreiben:
1 | DACH = (output * 1023) / 2.56;
|
Das zeitlich versetzte Setzen der Bits DALA und DAOE vs. DAEN hat
keinen Sinn. Bei der ersten Aktion wird der Ausgang ja schon
eingeschaltet, nur der Wandler noch nicht freigegeben. Da kannst du
auch gleich alles zusammen initial aktivieren:
1 | DACON = (1<<DALA) | (1<<DAOE) | (1<<DAEN);
|
Der DAC wandelt ja praktisch sofort (Zeitangaben gibt's leider nicht
im Datenblatt), man muss die Wandlung nicht erst ,,anschieben'' wie
beim Sukzessiv-Annäherungs-ADC.
> Wie kann ich den DA Wandler dazu benutzen meinem Comparator die Spg
> vorzugeben?
Was ist dir hier in der Beschreibung der Komparatoren unklar? Jeder
der drei Komparatoren hat eine Konfigurationsform, bei der sein
negativer Eingang vom DAC versorgt wird. Der positive Eingang ist
immer nach außen geführt.