Das Programm liest über den ADC den Wert eines Potentiometers ein und wandelt ihn in ein PWM-Signal um. Dieses PWM-Signal (an PD6) kann z. B. zur Helligkeits- oder Drehzahlsteuerung verwendet werden. Zusätzlich schaltet es zwei LEDs abhängig vom eingestellten Duty Cycle: eine ab ca. 25 % und eine nur in einem kleinen Bereich zwischen etwa 40–50. Es handelt sich also um eine einfache Potentiometer-zu-PWM-Steuerung mit Statusanzeige.
Ohne die "Qualität" des Codes beurteilen zu wollen 2 Anmerkungen dazu: Für was für einen Controller ist das? Code als PDF? Warum?
Für was für einen Controller ist das?
Der Code ist für einen veralteten AVR-Mikrocontroller bestimmt, daher diese kryptografische Notation:
1 |
|
2 |
|
3 |
|
Der Code ist für einen veralteten AVR-Mikrocontroller bestimmt, daher diese kryptografische Notation:ADCSRA = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); TCCR0A = (1 << COM0A1) | (1 << WGM01) | (1 << WGM00);
Was ist daran kryptografisch? Sind dir magic numbers lieber, für die man erstmal die Namen und Bedeutungen der Bitpositionen bestimmen muss?
Der Code ist für einen veralteten AVR-Mikrocontroller bestimmt, daher diese kryptografische Notation:
Auch moderne AVRs haben diese Notation noch und wenn man sich ein bisschen damit beschäftigt, versteht man die Register- und Bitnamen problemlos.
ADCSRA: ADC Control and Status Register A ADEN: ADC Enable ADSC: ADC Start Conversion ADFR: ADC Free Running Select ADIF: ADC Interrupt Flag ADIE: ADC Interrupt Enable
Nenn mir einen Controller, bei dem die Register intuitiver benannt sind (auf Registerebene, nicht in einem HAL)
@TO: Lass dich nicht unterkriegen, mach weiter so. Für dich ist es ein Projekt, für andere, die die die Weisheit mit Löffeln gefressen haben, ein Grund zu stänkern.
+1 (ich versuch auch grad mir C beizubringen, was für ne Schei..e 😁, wenn man fast 40 Jahre Pascal hatte)
Was ist daran kryptografisch?
Alles.
Sind dir magic numbers lieber, für die man erstmal die Namen und Bedeutungen der Bitpositionen bestimmen muss?
Nein, genau umgekehrt, es geht um Namen und Bedeutungen.
Aktuelle Notation z.B.:
CMP0EN --- Compare Channel 0 Enable WGMODE_SINGLESLOPE --- Waveform Generation Mode: Single-slope PWM
ich versuch auch grad mir C beizubringen
Kein Hexenwerk.
CMP0EN --- Compare Channel 0 Enable WGMODE_SINGLESLOPE --- Waveform Generation Mode: Single-slope PWM
Schöne Makros. Dahinter kann man dann auch die "kryptische Notation" verbergen. Gegen sinnvollen Fortschritt wehrt sich niemand. Die alte Notation basiert auf den Registern und deren Bits, nicht auf der Zielfunktion. Die kann man ggf. halt noch weiter abstrahieren, was Atmel/Microhip inzwischen demnach wohl macht. Im Datenblatt nachgucken, was was macht, muss man eh. Und wenn man nicht mal so einfache Bitschubschreien versteht...
Crazy Harry schrieb:
ich versuch auch grad mir C beizubringen, was für ne Schei..e 😁, wenn man fast 40 Jahre Pascal hatte
Mimimi?! Mit so einer Einstellung kann das nichts werden.
Eben, Alfred Arnold hat es mit seinem Universal-Assembler auch geschafft. Heute fällt das kaum noch auf
1 |
|
2 |
|
Zwischendurch sah es mal so aus:
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
die die die Weisheit mit Löffeln gefressen haben
Mimimi?! Mit so einer Einstellung kann das nichts werden.
Siehst, da ist einer 😁
Ich hab' uebrigens C nach ca. 4 Jahren Pascal angefangen, da fand' ich das eher eine Erleichterung.
noch einer
Ist normal hier: Maulen anstatt sagen, wie es richtig geht.
auch wenn bisher nur gemotzt wurde
Man muss auch unterscheiden zwischen motzen und konstruktiver Kritik bzw. Verbesserungsvorschlägen.
Konstruktive Kritik: Es ist niemandem geholfen den Code hier als PDF anzuhängen. Als reine C Datei, in diesem Fall am besten main.c benannt, wäre hier auf jedenfall besser.
Und was bringt mir der Code wenn ich nicht weiß für was für eine uC er geschrieben wurde? Ich meine das ist kein abstrakter Code den ich durch eine HAL Kapseln könnte. Das ist HAL und Applikation in einem. Also durch die Register Angaben und Header nur für eine begrenzte Menge an uC geeignet. Ohne die Abgabe ist er also ziemlich nutzlos.
Motzen:
Die 50 Zeilen Code die gerade Mal die Basics dieses Forums abbilden als Projekt zu Posten ist überflüssig. In der Artikelsammlung steht das alles schon drin. Gerade mit der speziellen Ausprägung der Schwellwerte kann das so vermutlich kein zweiter brauchen.
Ich denke, man erkennt den Unterschied.
Leute, reisst Euch mal zusammen. Der Code im PDF ist immerhin kopierbar, als JPEG nicht. Beides auf die gleiche Stufe zu stellen ist daher nicht ganz fair.
Statt sich hier an Äußerlichkeiten aufzugeilen hätte man doch einfach mal den Source hier als .c anhängen können, oder? Da Ihr das bisher nicht geschafft habt, mach ich das mal.
Gefällt mir. Scheint etwas ähnliches zu sein wie:
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 |
|
22 |
|
23 |
|
Da Ihr das bisher nicht geschafft habt, mach ich das mal.
Aber wozu? Der ursprüngliche Thread wurde komplett gelöscht.
sizeof(char)
sizeof (char) ist per Definition immer 1 und kann daher weggelassen werden.
Leute, reisst Euch mal zusammen. Der Code im PDF ist immerhin kopierbar, als JPEG nicht. Beides auf die gleiche Stufe zu stellen ist daher nicht ganz fair.
Also Frank, ganz ehrlich, dass noch schön reden zu wollen ist Quatsch. Damit fördert man nur solchen Unsinn.
1 |
|
2 |
|
Bin schon garnicht mehr gewohnt kein FreeRT-OS zu haben^^
Oder Rust mit async und await^^
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.