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?
N. M. schrieb: > Für was für einen Controller ist das? Der Code ist für einen veralteten AVR-Mikrocontroller bestimmt, daher diese kryptografische Notation:
1 | ADCSRA = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); |
2 | |
3 | TCCR0A = (1 << COM0A1) | (1 << WGM01) | (1 << WGM00); |
Beitrag #8014110 wurde von einem Moderator gelöscht.
Georg M. schrieb: > 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?
Georg M. schrieb: > 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)
Beitrag #8014439 wurde von einem Moderator gelöscht.
Rahul D. schrieb: > Was ist daran kryptografisch? Alles. Rahul D. schrieb: > 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
Beitrag #8014444 wurde von einem Moderator gelöscht.
Crazy Harry schrieb: > ich versuch auch grad mir C beizubringen Kein Hexenwerk. https://www.w3schools.com/c/index.php
Georg M. schrieb: > 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...
Beitrag #8014452 wurde von einem Moderator gelöscht.
Rahul D. schrieb im Beitrag #8014439: > 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 | static char *FileMask; |
2 | FileMask = (char*)malloc(sizeof(char) * STRINGSIZE); |
Zwischendurch sah es mal so aus:
1 | int main(int argc, char **argv) |
2 | BEGIN
|
3 | char *Env,*ph1,*ph2; |
4 | String Dummy; |
5 | int i; |
6 | static Boolean First=TRUE; |
7 | CMDProcessed ParUnprocessed; /* bearbeitete Kommandozeilenparameter */ |
8 | |
9 | ParamCount=argc-1; ParamStr=argv; |
10 | |
11 | if (First) |
12 | BEGIN
|
13 | endian_init(); nls_init(); bpemu_init(); stdhandl_init(); |
Beitrag #8014459 wurde von einem Moderator gelöscht.
Crazy Harry schrieb: > die die die Weisheit mit Löffeln gefressen haben Rahul D. schrieb im Beitrag #8014439: > Mimimi?! Mit so einer Einstellung kann das nichts werden. Siehst, da ist einer 😁 Dergute W. schrieb im Beitrag #8014444: > 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.
Beitrag #8015144 wurde von einem Moderator gelöscht.
Beitrag #8015477 wurde von einem Moderator gelöscht.
Crazy Harry schrieb im Beitrag #8015477:
> 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.
Beitrag #8015670 wurde von einem Moderator gelöscht.
Beitrag #8016287 wurde von einem Moderator gelöscht.
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.
:
Bearbeitet durch Moderator
Gefällt mir. Scheint etwas ähnliches zu sein wie:
1 | #!python
|
2 | # vim: fileencoding=utf-8: ts=4: sw=4: expandtab:
|
3 | #╭──────────────────────────────────────────────────────────────────────────────╮
|
4 | #│ PICO_ADC_PWM_LED.PY │
|
5 | #╰──────────────────────────────────────────────────────────────────────────────╯
|
6 | from machine import Pin, PWM, ADC |
7 | |
8 | PWM_GPIO = const(0) |
9 | ADC_GPIO = const(26) |
10 | LED1_GPIO = const(1) |
11 | LED2_GPIO = const(2) |
12 | |
13 | adc = ADC(ADC_GPIO) |
14 | pwm = PWM(PWM_GPIO,freq=1000,duty_u16=0) |
15 | led1 = Pin(LED1_GPIO,Pin.OUT,0) |
16 | led2 = Pin(LED2_GPIO,Pin.OUT,0) |
17 | |
18 | pct = 2**16/100 |
19 | while True: |
20 | analog = adc.read_u16() |
21 | pwm.duty_u16(analog) |
22 | led1.value(1 if analog > 25*pct else 0) |
23 | led2.value(1 if 40*pct < analog < 50*pct else 0) |
Frank M. schrieb: > Da Ihr das bisher nicht geschafft habt, mach ich das mal. Aber wozu? Der ursprüngliche Thread wurde komplett gelöscht.
:
Bearbeitet durch User
Bauform B. schrieb: > sizeof(char) sizeof (char) ist per Definition immer 1 und kann daher weggelassen werden.
Frank M. schrieb: > 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 | while (ADCSRA & (1 << ADSC)) // Warte, bis Konvertierung abgeschlossen ist |
2 | ;
|
Bin schon garnicht mehr gewohnt kein FreeRT-OS zu haben^^ Oder Rust mit async und await^^
:
Bearbeitet durch User
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.