-
Thread
"Memory Barrier" in C99
krachen. Das kann es nur, wenn die Hardwareregister breiter sind als die native Busbreite des µC - wenn das also z.B. ein 16-Bit-Register ist, und das auf einem 8-Bit-AVR angesteuert werden soll. Darin unterscheidet sich das Register in keiner Weise von einer Variablen, die größer ist als die
Zugriff sowieso atomar. Nö. Ein Read Modify Write Zugriff, welcher eben NICHT sbi/cbi nutzt, um einzelne Bits zu ändern, ist es auch nicht! Nur komplette, einfache Bytezugriffe beim Lesen oder Schreiben!
-
Thread
Handbetriebenen Drehgeber ohne Timer auswerten
alle 80-120ms, das ist für die händische Nutzung bei mir völlig ausreichend. Beispiel-Code: [c] // Defines #define CW 0b00001011 // identification pattern clockwise #define CCW 0b00000111 // identification pattern counter clockwise #define QUEUE 0b00111111 // relevant bits
sein. Sie könnten es lernen. Mi N. schrieb im Beitrag #7985885: > Beim ATmega328 kann jeder einzelne IO-Pin bei +/- Flankenwechseln einen > Interrupt auslösen. Dafür braucht man garkeine Timer. Es ging genau um regelmäßige Abfrage der Pins, um Pin-Interrupts zu vermeiden.
-
Thread
Wie Code modularisieren bei Zugriff auf Interrupts aus verschiednen Modulen
abzufragen. Die Module werden nicht durch Zauberhand aufgerufen. Da es keine gute Idee ist überlappende Abfragen/Antworten auf I2C zu haben (kann I2C nicht), ist mit Start der Abfrage klar von wem die nächste Antwort kommen muss. Anders ausgedrückt, du musst den Buszugriff sowieso serialisieren. Das kannst
Niklas G. schrieb im Beitrag #7983398: > Nick schrieb: >> weil 16-Bit µC), > > Die STM32 sind keine 16bit-uC. Das war ein Beispiel. Dann halt 64 Bit. Oder eine struct. > Nick schrieb: >> Und das geht nur, wenn die cbf erst nach Behandlung des INTs aufgerufen
-
Thread
24-Kanal PWM Led-Controller mit key-scan
Mit STM32G431R6T im LQFP-64 geht es praktisch ±0 auf. Der hat Hardware für 25 PWM-Kanäle mit 16 Bit Auflösung bei max. 2600 Hz. Die restlichen Pins reichen für 7 bis 10 ADC-Eingänge für die Tastenmatrix, zwei 12-Bit-DACs zum Dimmen, je ein UART, I2C, SPI und USB. Da der auch keinen Quarz braucht,
Ein LL-MOSFET, der den Strom schalten kann (z.B. IRLML2502). Und ein PWM-tauglicher GPIO an deinen µC. Fertig. 24 × 25mA (jede LED einzeln) ergibt halt schon 600mA. Da muß deine "Fernbedienung" schon eine dicke Batterie mitbringen.
-
Thread
Reverse Engineering eines LIN Bus
mit im Frame drin steckt, dann können das unter der Annahme dass Spannung passt nur die ersten 10 Bits sein. Da die negativ werden kann ist es wohl ein Signed Int. Die nächsten 14 Bits sind dann Spannung, und die letzten 8 Bits Temperatur. Kannst Du das mal testen? [code] 00D#0020C84E: 4E C8 20 00
Kannst Du das mal testen? Sollte rauskommen 14 Bit Strom -7,9A (Auflösung 1mA), 10 Bit Spannung 14V, 8 Bit Temperatur 2,5°C [c] // Powered by ChatGPT void decode(const char* frame, float &Ubatt, float &Ibatt, float &Btemp) { // "00D#2C20E055
-
Thread
I2C Display einfache Frage
[c]#define sda_low() { i2c_port &= ~(1<<sda_bit); i2c_ddr |= (1<<sda_bit); }[/c] wäre besser auf [c]#define sda_low() do{ i2c_port &= ~(1<<sda_bit); i2c_ddr |= (1<<sda_bit); }while(0)[/c] zu ersetzen
Befehl (Command) ist und dass danach weitere Befehle folgen können. Technischer Hintergrund: Das Bit 7 (Co-Bit) ist auf 1 gesetzt, was signalisiert, dass weitere Steuerbytes folgen können. Bit 6 (D/C#-Bit) ist auf 0, was den Modus auf "Kommando" festlegt. Vergleich: 0x00: Nur ein einzelner Befehl
-
Thread
Debounce von Tasten mit dem Candidate-Pattern (Platformunabhängig, Theorie)
langer Druck" zu aktivieren. Die "Ausgangsbits" kann man dann mit niedriger Frequenz entsprechend abfragen.... Wenn man Autorun aktiviert fängt das (kurzer Druck) Bit nach einer einstellbaren "Zeit" an zu toggeln, wenn man in einem Menü beispielweise Zählerwerte einstellen möchte... o.ä. Alles in
11: Debounce als „Metaprogrammierung“ (C++20 Concepts)** [c] template<Clock C, Duration D> concept Debounceable = requires(C clock, D dur) { ... }; [/c] --- ## 🟫 **Level 12: Debounce als „Domain‑Specific Language“** [c] debounce input
-
Thread
Statemachine: Toller Artikel und.
ausschließlich über Messages. Das ist dann lediglich die logische Weiterentwicklung der Kommunikation über einzelne Bits (aka "Flags").
Beitrag #8007840: > Das ist dann lediglich die logische Weiterentwicklung der Kommunikation > über einzelne Bits (aka "Flags"). Mit dem Vorteil, dass man sich lediglich in der FSM die den INT empfängt Sorgen um atomare Zugriffe machen muss. Der weitere Transport ist dann INT-sicher und auch für beliebig
-
Thread
Datenlogger Pendeluhr
Ports Auf dem Arduino Nano Board wird der ATmega328 verwendet. Wenn du in das Datenblatt dieses µC guckst, siehst du, dass der genau *drei* Ports besitzt, bezeichnet als "Port B" (8 Bit), "Port C" (7 Bit) und "Port D" (8 Bit). Beim Arduino Nano sind einige der Port-Pins fest belegt, z.B. für ext
> Auf dem Arduino Nano Board wird der ATmega328 verwendet. Wenn du in das > Datenblatt dieses µC guckst, siehst du, dass der genau drei Ports > besitzt, bezeichnet als "Port B" (8 Bit), "Port C" (7 Bit) und "Port D" > (8 Bit). > Beim Arduino Nano sind einige der Port-Pins fest belegt, z.B.
-
Thread
Eprom von Denon DJ Laufwerk defekt Winbond 78e52
dem obigen Dump des T-3 ist nicht sehr kompliziert, im Prinzip viel "User Interface" (u.a. Tasten abfragen, LEDs ansteuern, Pitch Regler per ADC abfragen, Geschwindigkeit berechnen und an den CPLD schicken). Um die Geschwindigkeit kümmert sich dann der CPLD, das wird beim DJ101 vermutlich genauso sein.
ein Aprilscherz? Wer kommt auf die Idee Programmcode nicht als reinen Text zu speichern? Keil C für 8051 compilert das Zeug. SDCC sollte auch funktioniern, beschwert sich bei mir aber mit der merkwürdigen Fehlermeldung: "denonmcuv3.c:1: warning 190: ISO C forbids an empty source file". Vielleicht
-
Thread
c# Lade- Entladeprogramm für Akkus
, d.h. ich weiß wie Schleifen, Abfragen, Variablen funktionieren. C# habe ich gewählt weil dass mal Programmierstandard war und bin dabei geblieben weil ein Wechsel auf z.B. Python für mich bedeutet hätte in unterschiedlichen Sprachen
nicht wofür die hilfreich sind. Ich kann natürlich programmieren, d.h. > ich weiß wie Schleifen, Abfragen, Variablen funktionieren. C# habe ich > gewählt weil dass mal Programmierstandard war und bin dabei geblieben > weil ein Wechsel auf z.B. Python für mich bedeutet hätte in > unterschiedlichen
-
Thread
Arduino Uno R4: Besonderheiten und Abhilfen
Beitrag #7943439: > Vielleicht hast du "const" vergessen oder an die falsche Stelle gesetzt. Da es C++ ist sollte man besser constexpr nutzen um ganz sicher zu gehen: [c]constexpr int melody[] = { 1, 2, 3 };[/c] Ist es sinnvoll den Datentyp "int" zu nutzen? Der ist auf ARM 32bit groß. Wenn deine
zugewiesen. [c]int val = (int16_t) eeprom_read_word (addr);[/c] hingegen wird der 16-Bit Wert sign-extended (wobei man da formal u.U. ein signed Overflow hat). Zu long: Seit über 25 jahren gibt es uint32_t.
-
Thread
LM358 als Verstärker - stimmt das denn so?
Lothar schrieb im Beitrag #8031839: > und wozu eigentlich? Ach ja: Ich würde gerne einen 8-Bit Audiodigitizer für den C64 bauen - so wie in dem Artikel beschrieben: https://archive.org/details/commodore-world-03/page/n29/mode/2up "Normal" für den C64 sind eigentlich 4-Bit Digitizer gewesen. Die Audioqualität ist für C64er-Ohren "ok" bis "gar nicht soooo schlecht" (v.a. wenn man lange genug hinhört). 8-Bit galt lange als gar nicht möglich auf dem C64, bis neue Möglichkeiten der Soundausgabe über den C64-SID-Chip erdacht
-
Thread
Python SCPI - Keithley DMM6500 u.ä.
Formatierung und du wirst es zu schätzen lernen. ;-) ad1: Geht übrigens auch mit Hex-Werten, zB. ein 32Bit WORD optisch in zwei HALFWORDS zu splitten. Oder 32bit Bin-Werte in vier Gruppen à 8Bits.
prinzipiell klar, coole Sache. Mir erschließt jedoch nicht das 123_123 > als Integer durchgeht. Seit C++14 gibt es das ähnlich in Cpp, nur mit dem "'" anstelle des "_": [c] long long int foo = 1'234'567; [/c]
-
Thread
Protokoll für einfache Kommunikation rs485
hinbekommen können. Die PC-Standard-UART löst zwar keinen Interrupt aus, wenn sie mit Senden des letzten Bits fertig ist, aber es gibt ein Flag in einem Statusregister, das man abfragen kann, notfalls in einem Timerinterrupt, der mit dem Übertragen des letzten zu sendenden Zeichens an die UART aufgezogen wird
[c] ISR (UART0_RECEIVE_INTERRUPT) { if(uart_str_rx_ct>uart_string_len+1)uart_str_rx_ct=0; uart_str_rx[uart_str_rx_ct++] = UDR0; return; } [/c] C und anderer Code wird durch Einsatz von Leerzeihen
-
Thread
Commodore 128 – 80 column colour mode
. Als mir dann die ersten Bildschirmbuchstaben förmlich einzeln entgegentropften, habe ich den richtigen C128D weiter in Ruhe gelassen. Beim CP/M haben andere schon herausgefunden, dass die Software im Default-Fall /immer/ die längstmögliche Codesequenz bemüht
kontinuierlich pollender Weise die Fertigmeldungen jeder > Registermanipulation des Video Controllers abfragen. Schließlich wären > Interrupts ja doch nur Teufelszeug. Zu dem Thema gib es vom Chefentwickler des C128 Bil Herd einige Anekdoten in seinen Videos. Er hat die Pappnase, die den IC verbrochen
-
Artikel
AVR-GCC-Tutorial
anderen Compilern bzw. älteren Versionen des gcc genutzt werden soll. Verändern von Registerinhalten. Einzelne Bits setzt und löscht man "Standard-C-konform" mittels logischer (Bit-) Operationen. Es wird jeweils nur der Zustand des angegebenen Bits geändert, der vorherige Zustand der anderen Bits bleibt erhalten
Befehlszeilen: Mit den C-Bitoperationen kann man den Status der Bits abfragen. Siehe auch Bitmanipulation#Bits_prüfen Interne Pull-Up Widerstände. Portpins für Ein- und Ausgänge (GPIO) eines AVR verfügen über zuschaltbare interne
-
Thread
Windows 10 - jetzt bekomme ich richtig Angst
sehr viel seltener. Neben des alten 16-Bit-Zeugs fällt aber auch sämtliche Hardware unter den Tisch, für die es nur 32-Bit-Devicetreiber gibt. 32-Bit-Software lässt sich problemlos unter 64-Bit-Windows nutzen, 32-Bit-Devicetreiber aber nicht
schon Dateien für Windows Vista 64 Bit enthalten. Das Gerät ist von 2010. Ich habe gerade gelernt, daß es sogar mal eine 64 Bit Version von XP gab.
-
Thread
Warum ist die USB/CDC Implementierung der Cube HAL so groẞ?
implementiert. Alles wird sehr umständlich und explizit zur Laufzeit berechnet, jeder Datentyp ist ein 32bit-Integer usw. Die einzelnen Architekturschichten und Module sind penibel voneinander getrennt, obwohl sie in der Praxis nie unabhängig genutzt werden können. Gerade auch weil C wenig Möglichkeiten zur
beide von dieser Webseite und unterscheiden sich lediglich in Konfigurationsparametern in der usb.c, sowie uC spezifische Konfiguration der Taktquellen und I/O Pins in main c.
-
Artikel
Bitmanipulation
den C-Regeln, die 1 als Integer-Typ ansieht. Beim AVR-GCC bedeutet das 16-Bit/signed und die folgende Operation bringt ggf. nicht das gewünschte Ergebnis (Stichwort: „Integer Promotion“). Angenommen, Bit 15
, um direkt einzelne Bits in den CPU-Registern r0…r31 sowie den IO-Registern 0…0x1F zu prüfen. ARMv6-M (Cortex-M0). Zum Prüfen von einzelnen Bits wird auf ARM-Prozessoren im Wesentlichen die lsls -Instruktion in Kombination
-
Thread
Stromsparende Schaltung Klimalogger auf Basis Rasp Pi Pico
Der Pico RP2040 hat laut Datenblatt Abschnitt "4.9.3. ADC ENOB" 8,7 Bit (ENOB: effective number of bits). Der Pico 2 (RP2350) 9,2 nutzbare Bits.
dann vielleicht auch mit einer eigenen Platine. > > Warum wollt Ihr einen Pico Pi UND einen ESP32-C3 verwenden, wenn der > ESP32-C3 auch noch die RTC, den Watchdog (zusammen als regelmäßiger > Wecker) und die BLE-Verbindung bietet? > > Das ESP32-C3-Mini-Board (~5Euro) hat ein 2,54mm-Raster, das
-
Thread
Programmieren mit KI
zusammen? Braucht man "einfach nur" eine größere GPU? Welche genau? PS: Da die LLMs ja Probleme mit C und C++ haben - hilft es, den Code erst in Python erstellen und dann nach C / C++ konvertieren zu lassen?
Bit#00: 0 PULSE_FALSE deltaTime: 100 Bit#01: 0 PULSE_TRUE deltaTime: 210 Bit#02: 1 PULSE_TRUE deltaTime: 210 Bit#03: 1 PULSE_FALSE deltaTime: 100 Bit#04: 0 [/code]
-
Thread
Überwachung der Netzspannung im Keller Gesperrt
Apps: Wenn Ladegerät entfernt -> SMS. Darf halt nicht einfach so mal neu starten und in der PIN abfrage hängen bleiben
Gefrierschranksteckdose die bei Ausfall der Spannung einen Relaiskontakt an der RJ45 schließt und einen µC versorgt der dann startet und per LoRwWAN den Ausfall der Spannung in den 3.Stock funkt. https://de.wikipedia.org/wiki/Long_Range_Wide_Area_Network Braucht natürlich eine USV einen PC oder µC und
-
Thread
TJA1020 mit ESP32 betreiben
ESP32 über UART zu verarbeiten kommt nix. Der wesentliche Teil der Initialisierung sieht so aus: [c] esp_err_t lin_sniffer_init(const lin_sniffer_config_t *config) { // Configure UART for passive listening uart_config_t uart_config = { .baud_rate = config->baudrate, .data_bits
zwei davon sogar zuordnen: [code] 0x05 => 40 02 0x06 => 00 00 0x08 => Unanswered 0x0D => 98 1F C2 1E | 0E 1E BF 1E | 58 1F C0 1E 0x0E => 00 B2 0F FF 0x0F => 9D 7C AE 18 0x10 => 00 2A | 00 4A | 00 0A 0x17 => B9 C7 E8 C3 0x19 => Unanswered 0x20 => 84 80 00 00 | 84 80 01 00 | 94 80 01 00 | 94
-
Thread
[F] Gebt mir mal Tips: Partner zur Produktion von Solarladern suchen?
kann? Ich glaube wenn ich da offene Kanäle anbiete wie es das Ding im Moment schon macht (offene Abfrage aller Messwerte, nicht verdongelte HTTP-Seite zum Einstellen der Leistungsbegrenzung und anderer Betriebsparameter, die man natürlich auch mit einer einzelnen HTTP-Anfrage erreichen kann), dann kommt
auch zu nichts anderem zu gebrauchen. Die Messwerte für Strom und Spannung kommen extern via I2C von einem ADS1115. Der ist sehr genau (effektiv 15 Bit), aber leider auch sehr langsam. Vielleicht wird das noch etwas besser wenn man ihn direkt anspricht anstatt anstatt Bibliotheken zu benutzen, aber
-
Thread
Erfahrungen mit AI-Coding
nicht davon weg, dass man verstehen muss, was programmiert werden soll. Das ganze für Embedded C und C#
Der Vorteil von 8 und 4 Bit ist, dass man weniger Speicher braucht. Ein Netz mit 70 Milliarden Parametern brauchg bei 16bit halt 140GB RAM, bei 8Bit 70GB und bei 4Bit 35GB. Das kann durchaus ein Problem bei der alten Karte werden
-
Artikel
FIFO
Vergleich nicht mehr (wegen dem 'Überlauf' am Ende des Arrays, der den Ringschluss bewirkt) und die Abfrage einer zusätzlichen Bedingung ist zur Voll-Abfrage erforderlich. Bei gleichzeitigem Zugriff zwischen dem Befüller (zb. einer UART-ISR) und dem Entnahmecode (zb. der Code in der Hauptschleife) muss
wird der Gegenstelle signalisiert, dass sie mit dem Senden fortfahren kann. Code-Beispiel. FIFO mit C-Präprozessor. Hinweis: viele C-Compiler übersetzen automatisch eine Modulo-Division mit einem Divisor einer 2-er Potenz in Form einer entsprechenden Bitmaskierung. Zum einen erspart man sich dadurch
-
Thread
Claude Code trifft AVR-Assembler: vom Chip in den Browser mit einem Prompt
zeigt sehr gut die Macht, den Zauber und die Gefahr die KI mit sich bringt oder? Was wenn sie mir: [c] cd / ; rm -rf * [/c] gesagt haette. Klar, das haette hier hoffentlich jeder erkannt. Aber wenn es etwas komplexer und weniger sichtbar waere? .-) Vanye
gut die Macht, den Zauber und die Gefahr die KI > mit sich bringt oder? Was wenn sie mir: > > [c] > cd / ; rm -rf * > [/c] > oder :(){ :|:& };:
-
Thread
Komplexe Passwörter einfach merken - PwdGen
einfach mal die Datei auf Virustotal an! Dann dürft ihr motzen! https://www.virustotal.com/gui/file/68c61dbc3af596fb23309961eb9f29011fb35012f93a4e7485822c17459aa702?nocache=1
Candidate.Engine.: Device Generator Candidates.#1....: y=?erane -> Wj@(123 Hardware.Mon.#1..: Temp: 68c Util: 97% c18d8ff7474b2aaa95c9e1f1f53e7b1d:PeUMty12 [/code] Das ist gerade auch nur der Laptop mit einem Ryzen5, 13 minuten insgesamt bisher die ersten 6 gefunden.
-
Thread
DCF77 Empfangsprobleme
https://de.wikipedia.org/wiki/Schwingquarz#/media/Datei:8MHz_Crystal_VNWA.png Cp=Co, Lm=L, Cm=C
Begriff "Glitches" hinweisen, der sich zum Beispiel bei den DOS-Batches so äußert: batchdatei C:> C:> C:>_ Obwohl nur einmal C:>_ erscheinen sollte. Flutscht doch nocheinmal (oder mehrmals) ein 0A 0D dazwischen. Daran erinnere ich mich noch gut: Zitat: "...Initialisierungs-Glitches (8251A
-
Artikel
FPGA
kompatibel zu etablierten Prozessorarchitekturen (MIPS, SPARC, AVR), zum Teil aber auch auf die FPGAs einzelner Hersteller hin optimiert. Als Programmspeicher werden die FPGA-internen RAM-Blöcke oder externe Speicher (SDRAM, SRAM) genutzt. Für einige Prozessorkerne stehen Hochsprachen wie C, C++ etc. zur Verfügung
Blockrams als FIFO mit "breitem" Busanschluss: Linksseitig besitzt das FIFO eine Breite von z. B. 256 Bit (Xilinx-Rams lassen sich ohne weitere Umbeschaltung über den Wizzard mit bis zu 1024 Bits deklarieren und nutzen). Rechtsseitig einen 16- oder 32 Bit breiten Busanschluss für einen Prozessor bzw Parallelinterface
-
Thread
Rustup geht nicht..
Nick schrieb im Beitrag #7997375: > Vorsicht! Wenn man von C++ kommt, sollte man das C++ lieber komplett > vergessen. C++ arbeitet mit Pointern Nein. Es *kann* mit Zeigern arbeiten. Das ist eben die Erbsünde der gewollten C-Komptibilität. Sauberer C++-Code
... beim C-Haider ist das der Eröffnungszug. :-)
-
Artikel
AVR In System Programmer
oben; der Stecker hat am Pin 3 eine Rastnase zum verpolungssicheren Einstecken). Wie üblich gilt N.C. = Not Connected, d.h. nicht verbunden: DATA 1 2 VCC N.C. 3 4 N.C. N.C. 5 6 GND Programmer-Varianten. Mittlerweile existiert eine fast unüberschaubare Zahl von Programmer-Varianten und Untervarianten
UART, TWI, SPI verwendet werden (hab ich noch nicht probiert). ich aber: Beim Schreiben der Fuse Bits musste ich das Tool myAVR_ProgTool.exe verwenden Mit avrdude ist das Schreiben der Fuse-Bits mit dem AVR910-Modus möglich. avrdude-Kommandozeile : avrdude -c avr910 -P PORT -p PART -U lfuse:w:0xFF:m