-
Thread
Suche eine Art Logicanalyzer für den Lpt
anderen Krempel auf dem PC laufen lassen. Das ist halt der Nachteil des Frickelports, mehr als "Bit-Banging" geht damit nicht.
Beitrag #7493966: > Impulslänge und Frequenz? Wenn der Impuls oder die Pause kürzer ist als zwei Abfragen am LPT dauern, bekommt der PC das nicht mit. Vergleiche mal mit der kürzesten Pulslänge die mach3 erzeugen kann.
-
Thread
Arduino - zeitkritische Signale
und schaltet während des Zugriffs Interrupts ab, damit niemand dazwischen funken kann. (s. wiring.c)
. In Zeiten von Mikroprozessoren hattest du die Komponenten noch einzeln auf dem Board, jetzt sind sie auf einem Chip in den uC integriert.
-
Thread
STM32F767: "HAL_UART_Receive_IT" bringt busy
HallState != HAL_OK) fehlerspeicher_schreiben(FKT_KNX_RX_CALLBACK, 1, HallState); } } [/c]
*/ __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST); return HAL_BUSY; } } [/c]
-
Artikel
Umstieg von Arduino auf AVR
einige kleine, aber hilfreiche Schritte aufgezeigt. Diese Anleitung ist nur für die Arduinos mit einem 8bit-AVR als Prozessor (Uno, Mega, Leonardo, ...) gedacht und nicht für 32bit-Mikrocontroller (Due, ...). Der Mikrocontroller wird in dieser Anleitung in C programmiert. Grund dafür ist die Verteilung von
empfehlen, ein C-Buch oder wenigstens ein (gutes) C-Tutorial durchzuarbeiten. Im Artikel C stehen einige Links zu Tutorials und Einführungen zur Sprache C. Es dürfte einfacher sein, sich die C-Kenntnisse auf einem PC
-
Thread
std:atomic auf STM32
IRQ. Du kannst aber auch ein SeqLock mit LDREX/STREX benutzen für RMW-Folgen. Für Typen einzelne load / store für DT <= 32 Bit sind keine besondere Maßnahmen erforderlich.
beheben. Ich müsste es sonst so > machen, dass ich im interrupt einen Puffer schreibe und beim abfragen > eben alle interrupts kurzzeitig deaktiviere, was unschön wäre. Wie schon gesagt: das Lesen oder Schreiben von 32-Bit Typen ist atomar, auf single-core ist auch keine Laufzeit-Memory-Barrier
-
Thread
Keypad 3x4 with Row + Column LEDs
ElC schrieb im Beitrag #7483113: > Habe ich das korrekt gemacht? Ja. Achte auf die Auswertung seitens des uC. Weil die meisten uC nur pull ups an den Eingängen haben, wird die aktive Taste low durchschalten
wie Dezimal-Decoder. Alles mit SPI oder I2C Eingängen ist nicht erwünscht. Der IC darf nicht abgekündigt sein, wie z.B. der 74C922 / 74C923. Etwas viel Text, aber es ist ja WE. :-) Ob in diesem Forum oder in anderen. Ich finde es suboptimal
-
Thread
Was ist von refurbishten Festplatten zu halten?
Ebay kann ich seeehr empfehlen was HDDs angeht. Habe dort mal 10x 1TB SAS Platten gekauft. Jede einzelne kam in einer eigenen Verpackung direkt für 2,5" HDDs, jede Platte hatte einen eigenen Ausdruck der Daten und Sector Tests dabei und jede Platte hatte ihre eigenen QR Code für eine Online Abfrage.
kamen in einem Pappkarton, einzeln in Papierschlangen eingewickelt und einzeln in ESD-Tüten verschweißt. Die HDs sehen neu aus, also keine Gebrauchs-oder Staubspuren. Laut SMART sind die HDs ca. 2099 Tage gelaufen. Die HDs habe
-
Thread
Impulse zählen ohne EXTI, 20kHz 300kHz
Habe gehofft es gibt mehrkanalige Zähler-ICs mit I2C ... Habe aber bei mouser keine gefunden, nur Zähler ohne i2c --Also einen kleinen uC dafür verwenden? Attiny XY als Zähler u. per I2C abfragen?
Oder mehrkanaligen Frequenzteiler und dann per Multiplexer (über I2C steuerbar!?) die einzelnen (runtergeteilten) Signale abfragen? Die Zählereingänge müssen nicht zeitgleich abgefragt werden. Also als Schleife sähe das im uC Code so aus in meiner Vorstellung:
-
Thread
GPS Signal Simulieren
beziehen könnte. https://www.ppmshop.de/liste/Labsat_3_Record_und_Replay.aspx?WPParams=43CCD7D4B5DDE6B7C2E0B1CDE1C8B6B794989476BBD3E7D5AFBCCAD5CCD2D7A3CED5C4B8B6D3B1DEBFC5E7C4E1B6B8D9C3BCDED9E79E9F82 So mal zur Orientierung, damit du zumindest die Anzahl der Dezimalstellen des €-Wertes kennst. fchk
en.wikipedia.org/wiki/Code-division_multiple_access * https://www.wasyresearch.com/generating-gps-l1-c-a-pseudo-random-noise-prn-code-with-matlab-and-c-c/ * https://www.analog.com/media/en/technical-documentation/design-notes/lna-optimized-for-gps-rep024.pdf * https://content.u-blox.com/sites/default
-
Thread
Arduino 2560 / Datenverlust bei Hardware-UART und SPI
Nein, bisher nicht. Wie kann ich diese abfragen? Ich nutze bisher die Arduino-Lib-Funktionen SerialX.xyz .... Mein Programm "merkt" erst beim CRC-Check, dass einzelne Bits oder ganze Bytes(?) verloren gegangen sind.
> Wie kann ich diese abfragen? Das muss jemand beantworten, der Arduino kennt - ich gehöre leider nicht zu diesem Kreis.
-
Thread
logarithmische LED-Skala, wie berechnen
Ich hab Anzeigen mit 64Segmenten verwendet. Bei so einer Anzeige wirst du mit einem linearen 10 Bit Wandler mangels Dynamik im Unteren Bereich keine logarithmische Kennlinie, die die Segmente einzeln nacheinander aktiviert, realisieren können.
berücksichtigt. Das tut sie nämlich. Ich erkläre es aber gern: Durch Weglassen der hinteren Bits vereinfacht sich die Abfrage, bzw die Faktoren werden durch 4 dividiert und sinnvoll fortgesetzt. 512/4 sind die 128, alle weiteren durch Faktor 2, der durch die Eingangsbedingung implizit definiert
-
Thread
ADC - Wert berechnen
braucht es keine Kommas. Dabei darf im Zwischenergebnis kein Überlauf auftreten, also Rechnung mit 32 Bit. Beim +/1bar Sensor reichen die Millibar nicht, da muss man eher auf Mikrobar gehen. Klingt komisch, ist aber so. Kann man aber am Ende wieder auf Millibar umrechnen. [c] int p; p = 122 * (int32
es keine Kommas. Dabei darf im > Zwischenergebnis kein Überlauf auftreten, also Rechnung mit 32 Bit. Beim > +/1bar Sensor reichen die Millibar nicht, da muss man eher auf Mikrobar > gehen. Klingt komisch, ist aber so. Kann man aber am Ende wieder auf > Millibar umrechnen. > > [c] > int p
-
Thread
PIC 16F1509, ADC , Error
eine Referenz von 1024 mV für den ADC wählen würde > (Auflösung 1mV) hätte ich eine Auflösung von 10 Bit auf die > Ursprungsspannung von 0 - 10 mV Du *kannst* keine 1024mV als Referenz nehmen. Zumindest nicht mit dem ursprünglich gewählten µC. Die minimale Referenzspannug ist dann 1.8V. Wenn du eine
Referenz von 1024 mV für den ADC wählen würde >> (Auflösung 1mV) hätte ich eine Auflösung von 10 Bit auf die >> Ursprungsspannung von 0 - 10 mV > > Du *kannst* keine 1024mV als Referenz nehmen. Zumindest nicht mit dem > ursprünglich gewählten µC. Die minimale Referenzspannug ist dann 1.8V.
-
Thread
Bandbreite Bluetooth mouse
Toucheinheit von Displays. Und mit denen fällt es sehr leicht, Touch-Ereignisse zu generieren, die die 16Bit tatsächlich brauchen. 2) Mäuse mit besonders hoher physischer Auflösung. Auch bei denen kann es sehr leicht passieren, dass die Änderung zwischen zwei Abfragen nicht in 8Bit passen. 3) (last
z.B. 8000dpi. 10cm (also ca. 4 inch) in 100ms gibt damit also 32000 Punkte, die in 10 bis 100 Abfragen zu melden sind. Also zwischen 320 und 3200 Punkte als ∂x in jeder Meldung. Jetzt klar, warum man da 12 oder 16bit benötigt?
-
Thread
Code optimieren ?
Der Onlinekompiler: https://www.onlinegdb.com/online_c_compiler verwendet 4 Bytes pro Array: [c] /****************************************************************************** Online C Compiler. Code, Compile
avr-gcc kennt auch 24-Bit Typen wie __int24.
-
Thread
schneller Optokoppler gesucht (3V RS-232, Reichelt?)
aber wenn's doch mal vorkommt, dann sollte nicht gleich alles abrauchen. Alternative wäre nach I2C-Isolatoren suchen und I2C benutzen - falls man mit denen kein UART-Signal übertragen kann.
Einschränkungen auch Balancing in einem einzigen IC (wofür sie aber wieder eine Steuerung durch einen µC brauchen) - aber bei Überwachung nur einer einzelnen Zelle (oder einer Parallelschaltung vieler), brauche ich das nicht bzw. kann ich das auch alleine machen wenn ich sowieso einen Steuer-Controller
-
Thread
Probleme mit SPI- PIC18
SPI1BAUD = 0x3; TRISBbits.TRISB5 = 0; //SPI1_Open(); } void SPI1_Open() { SPI1CON0bits.EN = 1; } void SPI1_Close(void) { SPI1CON0bits.EN = 0; } void SPI1_ExchangeByte(uint8_t data) { // while(!PIR2bits.SPI1TXIF){}; // dieser prüft ob platz im FIFO ist. SPI1TXB
warten auf den RX Interrupt beides geht. SPI1INTFbits.SRMTIF = 0; //while(!PIR2bits.SPI1RXIF); } [/c]
-
Thread
Automatischer Generatorstart bei niedriger Batterie (LiFePo4)
ghosten" war (besonders bei niedriger Spannung an der Generatorbatterie) Hier der Arduinocode: [c] const int RelaisZuendpin = 19; const int RelaisStartpin = 18; const int Spannungspin = A0; const int KnopfAn = 17; const int KnopfAus = 2; int Spannung; volatile int KnopfAusStatus = 1;
Aaaalso. Da es ja mehrere Probleme gibt, einzeln aufteilen und nicht alles auf einmal. Erstmal musst Du eine vernünftige Messung der Akkuspannung hinkriegen, eine Anbindung über 1M-Ohm erscheint mir dafür verdammt viel, die Störungen sind stärker
-
Thread
Untersuchung defektes VW Türsteuergerät
Auch die Eingänge T8h/5 (F220/F241) und T8h/4 (F2) scheinen zu funktionieren, und ändern weitere Bits in den LIN-Nachrichten an ID 0x26. Lege ich +12V an T6ca/2, so ändern sich wiederum weitere Bits in den 0x26-Nachrichten. Zusätzlich fängt das Steuergerät an, LIN-Nachrichten an die ID 0x3C zu senden
Pid 13 wird das J387 in der Beifahrertür sein. Diese Antwort wäre interessant zu sniffen. Pid 3C ist eine ASCII-Nachricht an das Zentral-Komfortgerät J393 und enthält praktisch das, was auch auf dem Typenschild steht: Ersatzteilnummer und Softwareversion. Pid 3D ist offensichtlich eine Abfrage
-
Thread
ATMEGA UART Empfang mit Verzögerung
ein? Wird der Empfängerausgang evtl. hochohmig und der µC kann sich dann selber irgendwelche EMV-Bits aus der Luft herzaubern?
Stringauswertung fizze ich mich jetzt nicht durch. > Sieht aber eher zu kompliziert aus. > > [c] > void Encoder_Schritte_abfragen(void) > { > Encoder_Schritte_auswerten(); > } > [/c] Das kann ich verstehen. Das eine ist das hardwaremäßige Abfragen, dass andere die Auswertung des Wertes,
-
Thread
Wer baut gegen Bezahlung ein Gerät mit Schaltung?
Z.B. als RTC RX8010SJ B (160nA), als Zwischenspeicher FM 24C64B-G (8kB, 151 year) und als MC der ATmega32U4. https://www.mouser.de/new/sparkfun/sparkfun-qwiic-pro-micro-usb-c-board/
Kalenderfunktion, welche einen > Stromverbrauch im Nanobereich haben (z.B. RV-1805 60nA) und über I2C > abgefragt werden können. RV-1805-C3 Not recommended for new design-in, please use RV-3028-C7 for new design.
-
Thread
Mit KI Programme für Mikrocontroller entwickeln
koennte Zensur natuerlich verbessern. Der Algorithmus diese Seite hatte z.B etwas gegen das Wort: [c] printf("Porno\n") [/c] Das koennte eine KI sicher dann auch besser machen. :-D Vanye
Berufsleben wird sich die Problemlösung von der klassischen Script-Programmierung (darunter zähle ich auch C und C++) weg bewegen.
-
Thread
Mit dem ATMEL STUDIO 7 klarkommen Gesperrt
Paste & Copy von diesem Code ? https://www.mikrocontroller.net/articles/Entprellung#Komfortroutine_(C_f%C3%BCr_AVR) [c] volatile uint8_t key_state; // debounced and inverted key state: // bit = 1: key pressed volatile uint8_t key_press; // key press detect volatile
C-hater schrieb im Beitrag #7417626: > jedenfalls 8Bit noch problemlos ohne diesen Nibble-Separator wahrnehmen. Das gibt es einen Spezialmode der das kann. HEX-Darstellung! ;-)
-
Thread
C++ Objektorientierung ?
, wie jeder gcc, mit einem C- und einem C++ -Compiler. Der eine spricht nur vollwertiges C, der andere nur vollwertiges C++. „Kompatibel“ ist das nur in so weit, wie C und C++ gemeinsame Sprachkonstrukte haben. Oliver
zugreifen (also z.b. zwei verschiedene > Peripheriegeräte abfragen) ?? I2C ist "single master / multiple client". Also Dein AVR kann viele Clients abfragen.
-
Thread
STM32F103 und ADC DMA mehrere Kanäle
Offensichtlich hast du versäumt, die anzahl der DMA-Zyklen anzupassen. [c] HAL_ADC_Start_DMA(&hadc1, (uint32_t*) &adc_buffer, 5); ^ [/c] Für 4 Kanäle sollte da auch 4 stehen.
in main() Entschuldige, ich habe jetzt mein eigenes Projekt noch mal runtergeladen und im main.c vor der while() loop nachgeguckt: da steht [c] HAL_ADC_Start_DMA(&hadc1, (uint32_t*) &adc_buffer, 4); [/c]
-
Thread
esp programmierung - ist mein Vorhaben machbar ?
ewig und 3 Tage für einen Mikrocontroller. Dann polle mit 100ms beide Eingänge. Dazwischen kann der µC stromsparend schlafen.
die Befehle von ESP Home an. Was vereinfacht die Byteauswertung ? Ich muss das erkennen, welches Bit zuerst gesetzt wurde. Ich müsste das Byte abfragen, dann merken, dass ein Bit gesetzt wurde, danach, wenn das zweite Bit gesetzt wird, auswerten. Aber wenn die Bit einzeln hintereinander ohne Überschneidung
-
Thread
Tasterverarbeitung mit ARDUINO-C
Bernd S. schrieb im Beitrag #7398636: > Wie kann ich in C bzw. C++ testen, ob im Arbeitsregister ( GPR ) r5, > dass Bit0 gesetzt ist ? Einfach die Adresse des Arbeitsregisters abfragen und schauen ob das Bit0 gesetzt ist sollte eigentlich kein Hexenwerk
gezeigt hat, wie es richtig in C++ auszusehen hat bzw. hätte. [c] if(bitRead(r5,0)) == 1 digitalWrite(LED0, !digitalRead(LED0)); [/c] AVR8ASM [avrasm] sbrs r5,0 ;Bit0 im GPR 5 gesetzt? falls ja naechsten Befehl ueberspringen
-
Thread
UDS Protokoll anwenden
Verbindung zum CAN Bus? Richtige Polung HI/LO > b) die richtige CAN Baudrate am ELM eingestellt? > c) die richtige CAN ID Länge (std 11 Bit oder ext)? > d) auf dem Oszi nachgelesen ob da was am Bus passiert? > e) Informationen über den CAN Bus und die daran angeschlossenen Geräte > (IDs)? > f) geprüft
a -> ist richtig b -> muss ich nochmal prüfen,aber ich denke wenn OBD Modes gehen muss es ja c -> 11 Bit d -> mach ich in der Arbeit e -> ne leider nicht wirklich hätte gehofft, dass es eine Gesamtabfrage zum Fehlerspeicher abfragen gibt. (mehr will ich auch nicht) f -> Es hängt definitiv
-
Thread
Eine Zahl in Einsen convertieren
auffüllen" ... Oh, FPGA - dann hast du natürlich recht, hatte ich nicht gelesen, dachte, es geht um C, C++, Java, Basic, Python ... Hab' den Beitrag über "Forum" allgemein gefunden, nicht die Sparte dazu wahrgenommen.
Aufgabe noch künstlich und völlig nicht nachvollziehbar erscheint, ist eine Schleife um die einz. Bits nötig.
-
Thread
Kommunikation zwischen zwei Mikrocontrollern. welches Protokoll?
hätte, hätte ich das mit CAN realisiert, aber das hätte einen weiteren Baustein erfordert, während I2C im uC schon drin war. Heute würde ich das gleiche mit UDP machen. I2C hat gut funktioniert, wir haben die Controller im 10bit Modus und mit relativ hoher Geschwindigkeit adressiert. Ich glaube aber
Protokoll eignet sich da am besten? > In Hardware könnte ich z.B. nutzen: > > USART > SPI > I2C/TWI > oder etwas eigenes > Es ist ein AVR-Controller. Wenn es einfach gehen sollte und wenn nicht ascii sondern Bytes zu übertragen sind, dann scheint mir USART in 9-bit-Mode am besten. 9. Bit kann
-
Thread
allgemeine PicoMite Anfängerfragen
Uwe D. schrieb im Beitrag #7353274: > I2C verwendet (ursprünglich) nur 7 Bit zur Adressierung Nee, es sind 8 Bit. Das unterste Bit gibt an, ob es sich um eine Lese- oder Schreibadresse handelt ;-)
Peter N. schrieb im Beitrag #7353370: > Die I²C-Adresse ist ja ein 8-Bit-Wort, bei dem das Bit 0 RW darstellt. Nein! Die I²C Adresse ist ein 7 Bit Wort. Danach wird das R/W Bit übertragen. Das sind zweierlei Parameter. Wie PicoMite das handhabt
-
Thread
Bitte um Hilfe mit Verständnis, ISR von Timer usw.
usw. [/c] Hier aber wird alles merkbar öfter als 1 Sek gemacht, so um 10%. Ich habe vermutet, das Problem kommt, da ISR gelegentlich zwischen Lesen und Schreiben von einzelnen Bytes von 16-bit-Variable kommt
bis Kommunikation mit DS3234 stattfindet. Ja, und? den Pin kannst du auch in deiner Main-Loop abfragen, ohne ISR... Vor allem wenn du die eigentliche Abfrage eh aus der Main-Loop heraus machst. [c] while (true) { .... if (bit_is_clear(DS_PIN, DS_PIN_NR)) query_ds3243() .... } [/c]
-
Thread
Arduino Blue Pill & CAN mit SN65HVD230
#7399501: > soweit hab ich es jetzt. Es funktioniert. Ich habe aber die Zuweisung > über den Befehl bitWrite bzw bitRead gemacht. Ich weiß nicht ob das ein > Arduino spezifischer Befehl ist. Ja, die (Makro-)Definition von bitWrite und bitRead finden sich in C:\Program Files (x86)\Arduino\hardware
Daten werden eingefüllt // mit bitwrite lassen sich einzelne bits innerhalb eines Bytes beschreiben. Hier Zustand TasterState in Erstes (ganz rechtes) Bit von Data0 schreiben bitWrite (CAN_TX_msg.data[0], 0, WeicheEinfahrtSBHSudGeradeausState);
-
Artikel
AVR-Tutorial: LCD
Der 4-Bit-Modus verwendet nur die oberen vier Datenleitungen (DB4–DB7). Um ein Byte zu übertragen, braucht man somit zwei Zugriffe, wobei zuerst das höherwertige Nibble (= 4 Bits), also Bit 4 bis Bit 7, übertragen
verständlich sein. Binär ausgeben. Um die Sache komplett zu machen; hier eine Routine, mit der man eine 8-Bit-Zahl binär auf das LC-Display ausgeben kann: Eine 16-Bit-Zahl aus einem Registerpärchen ausgeben. Um eine 16-Bit-Zahl auszugeben wird wieder das bewährte Schema benutzt, die einzelnen Stellen durch
-
Thread
Wie wichtig ist eine Mini-USB-Buchse zum Laden für die Kundenakzeptanz
Walta S. schrieb im Beitrag #7337913: > Ich stell mir gerade die Steckorgie vor wenn jedes Gerät einzeln an den > Laptop gesteckt wird. Das ist auch nicht ganz risikolos. Zum Beispiel habe ich noch ein Mehrfachkabel mit verschiedenen USB-Steckern am Ende, also auch USB-C. Wenn dort ein USB-C Gerät
nicht gut machen. Die gibt's auch in sehr handlich, vom einzelnen passiven C-auf-A-Kabel bis zu Mini-Hubs, die praktisch auch nur Kabel sind: https://www.reichelt.de/usb-c-8482-hub-2x-usb-2-0-a-buchse-1x-usb-3-0-a-buchse-logilink-ua0315-p315229.html Das halte
-
Thread
Empfehlenswerte Literatur zum Erlernen von C
Ein allgemein gehaltenes Buch über C auf Mikrocontrollern kann es meiner Meinung nach gar nicht geben. Denn diese Programmiersprache war eigentlich für (mindestens) 16 Bit Computer mit Betriebssystem gemacht. Deswegen hat in C der normale Integer 16 Bit. Einzelne Bits gibt es in C eigentlich nicht. Interrupthandler und das Ansprechen von Registern war dem Betriebssystem vorbehalten, welches an diesen Stellen vorwiegend in Assembler programmiert wurde
-
Thread
Timer: Zeitstempel erweitern
Datum-Zeitstempel mit einer Erweiterung um den Wert Millisekunde. Ich kann mit der TImerLib einen 64Bit Tick auslesen. Diesen werden kann ich auch quasi konvertieren in Millisekunde (absolut). Allerdings weiß ich nicht wie ich nun den Zeitstempel um den Wert Millisekunde erweitern könnte. [c] typedef
im MS Zeitmessung in Mega Siemens - was für ein Quatsch. https://de.wikipedia.org/wiki/Vors%C3%A4tze_f%C3%BCr_Ma%C3%9Feinheiten https://de.wikipedia.org/wiki/Internationales_Einheitensystem#Abgeleitete_Gr%C3%B6%C3%9Fen_und_Einheiten
-
Thread
Matrix mit 5x Rotary Encoder für STM32 uC
ob die reduzierte Komplexität für das Gesamtsystem und die vereinfachte Programmierung des "Master-µC" das wieder rausholt. Ansonsten ginge bei der Schieberegister-Umsetzung auch ein Daisy-Chain über die einzelnen Input-Platinen. Dann limitiert aber die Verkabelung die maximale SPI-Frequenz.
Es gibt sogar fertige Rotary Encoder mit I²C Schnittstelle. https://learn.adafruit.com/adafruit-i2c-qt-rotary-encoder?view=all Oder nur die Platine mit µC: https://www.duppa.net/shop/i2c-encoder-mini/
-
Artikel
ELV UP2000 Protokoll
=1 style="text-align:center" Message 0x4C DB1 DB2 .. DB7 DB1: Startadresse (24-bit) HIGH-Byte DB2: Startadresse (24-bit) MID-Byte DB3: Startadresse (24-bit) LOW-Byte DB4: Leertestalgorithmus, siehe Algorithmen DB5: Länge (24-bit) HIGH-Byte DB6
auf einen GetPinStatus. {| border=1 style="text-align:center" Message ACK AckSubType Data 0x06 0x6C DB1 DB2 DB3 DB4 DB5 Zuordnung der Pins zu den DatenBytes: Bit 7: Bit 6: Bit 5: Bit 4: Bit 3: Bit 2: Bit 1: Bit 0: DB1: PIN_12 PIN_11 PIN_10 PIN_09 PIN_08 PIN_07 PIN_06 PIN_05 DB2: PIN_20 PIN_19 PIN_18
-
Artikel
AVR-GCC-Codeoptimierung
möglicherweise etwas langsamer werden. Logische Operatoren werden auf int-Größe erweitert. Obwohl der AVR ein 8-Bit Controller ist, verlangt der C-Standard, daß ein int mindestens 16 Bits groß ist. Wegen den Promotion-Regeln von C werden 8-Bit Operanden in Operationen auf 16 Bits aufgeweitet. Beispiel: Den zweiten
Your C Code for 8-bit AVR Microcontrollers (Beispiel-Code)
-
Thread
RISC/V kommt in Schwung
Es geht ja auch nicht nur um einen einzelnen Befehl, sondern um den Befehlssatz und dessen Effizienz insgesamt. Zum Beispiel ist 64-Bit Arithmetic auf einem 32-Bit RISC-V umständlich: [code] int64_t add64 (int64_t a, int64_t b) {
also nicht über einen zentralen Takt verfügen. Abgehoben hat das bisher nicht. Von einem asynchronen C-Flag habe ich nicht gehört. Es gab allerdings einen 32-Bit Prozessor, der sein Ergebnis in 3 Stufen lieferte. In der ersten Stufe die unteren 16 Bits, in der zweiten die oben 16 Bits und in der dritten
-
Thread
1 Befehl pro Zyklus
: > Ein Takt per Befehl ist ein alter Hut. > Das konnten die DSPs schon lange bevor jemand R.I.S.C. > ueberhaupt buchstabieren konnte. Erster DSP: TMS 5100, 1978 Erster RISC: IBM 801, 1974
Original. Wenn ich mich richtig erinnere, war die Begründung, dass da drin ein zurecht gestutzter 16 Bit Kern werkelt.
-
Artikel
AVR-GCC-Tutorial/LCD-Ansteuerung
Der 4-bit-Modus verwendet nur die oberen vier Datenleitungen (DB4-DB7). Um ein Byte zu übertragen braucht man somit zwei Zugriffe, wobei zuerst das höherwertige "Nibble" (= 4 Bits), also Bit 4 bis Bit 7 übertragen wird und dann das niederwertige, also Bit 0 bis Bit 3. Die unteren Datenleitungen des LCDs, die beim Lesezyklus Ausgänge sind, lässt man offen (siehe Datasheets, z. B. vom KS0070). Der 4-bit-Modus hat den Vorteil, dass man 4 IO-Pins weniger
-
Thread
Überlauf in AVR mit C
Beitrag #7309902: > Bei der Warnung geht es nicht darum, ob der Operator atomar ist, Beispiel: [c] #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit)) [/c] warning: compound assignment with 'volatile'-qualified left operand is deprecated [-Wvolatile] Warum ist eigentlich auch egal, die
EAF schrieb im Beitrag #7309897: > denn ich weiß, dass |= nicht atomar ist Wen man damit ein einzelnes Bit in SFR <= 0x1F setzt, macht er eine atomare SBI Operation: [c] #include <avr/io.h> int main() { PORTB |= 1; } [/c] avr-gcc -mmcu=atmega328 -O1 test.c avr-objdump -h -S a.out