rokit88 schrieb:
> Nur kopieren reicht mir persönlich nicht. Will gerne verstehen wieso
> weshalb warum.
Niemand hindert dich, den Code zu analysieren und mit dem Datenblatt
abzugleichen, was die einzelnen Bitsetzerein machen.
>
1 | > ADCSRA = (1<<ADPS1) | (1<<ADPS0); // !!!WIE!!! stellle ich den
|
2 | > Frequenzvorteiler auf 64
|
3 | >
|
4 | > sum += ADC_Read( Input ); // ??
|
5 | >
|
Was steht denn im Datenblatt, welche Bits in welchem Register zu setzen
sind, um den Vorteiler auf 64 zu kriegen? (Hab nicht nachgesehen)
Und dann natürlich etwas, was du vor gefühlten 15 anderen Vorprojekten
eigentlich schon beherrschen solltest: Bits in eiem Register setzen,
Bits in einem Register löschen. Sozusagen das kleine Ein-mal-Eins der
µC-Programmierung. Nur das es dort Bits in einem Portregister waren, die
dann eben eine LED zum aufleuchten gebracht haben und hier sind es Bits
in einem Register, die eben was einstellen. Aber der Vorgang ein (oder
mehrere) Bits in einem Register zu manipulieren ist für dich als
C-Programmierer programmtechnisch immer der gleiche.
> int main (void) {
>
> uint16_t ReadAnalog( uint8_t Input, uint8_t samples ) // Lese
> Analogen eingang (Eingang/Anzahl der Messungen)
> {
> uint32_t sum = 0;
>
> for (uint8_t i = 0; i < samples; ++i ) {
> sum += ADC_Read( Input ); //
> }
>
> return (uint16_t)( sum / nsamples ); //
> }
Keine Funktionen innerhalb von Funktionen.
Ja, ich weiß, der gcc frisst das. Trotzdem: programmiere nach C Standard
wenn es keinen besonderen Grund dagegen gibt und du hast weniger
Probleme, wenn du mal auf andere Systeme kommst.
Also nicht
1 | void foo()
|
2 | {
|
3 |
|
4 | void bar()
|
5 | {
|
6 | ....
|
7 | }
|
8 |
|
9 | bar();
|
10 | }
|
sondern so, wie das in der Sprache vorgesehen ist
1 | void bar()
|
2 | {
|
3 | ...
|
4 | }
|
5 |
|
6 | void foo()
|
7 | {
|
8 | bar();
|
9 | }
|