-
Thread
Frage zu Struct
ist 2 Bits breit // All das hat in einer einzigen Byte-Variable Platz. // die 3 verbleibenden Bits bleiben ungenutzt } x;[/c] 2.: [c]struct { unsigned char bStatus_1:1; // 1 Bit für bStatus_1
einzelnes Bit, welches immer nur 'kein Vorzeichen' haben kann. Wozu die Ausnahme? Braucht kein Mensch. Wenn es einen Unterschied zwischen BitFeld1 und BitFeld2 in ... [C] struct Test { unsigned
-
Thread
Ringbuffer in C optimieren?
darum kümmern, daß der Pointer nach 0x2FF auf 0x200 springt, daß hat schon die Beschränkung auf 8 Bit in Verbindung mit der fixen Adresse, die durch 256 teilbar war, erledigt. Wie aber mache ich sowas nun in C (Microchip C32), ohne Konstruktionen wie: [c]if (ptr>Buffer+BufferSize) ptr = Buffer;[
> ... (Pointer ist 32 groß) 32 was? Bytes? Bits? Nibbles? > Wie aber mache ich sowas nun in C ... > Wobei ich mich mit der Frage mal auf Buffergrößen beschränken möchte, > die eine Optimierung zulassen, wie in dem Assemblerbeispiel genannt.
-
Thread
Wie muss man Pervasive Displays beschreiben?
Zweitens ist die Anzahl der gesendeten Bytes für die Zeilen nur 1x 44Byte! versuch das mal so ... [c] ;Zeile zu Linedata int Zeile; for (i=0;i<(Zeile>>2);i++) SPI_8Bit_oCS(0x00);//volle 4 Zeilen zuvor SPI_8Bit_oCS(0x03<<((Zeile & 0x03)<<1)); for (i=0;i<43-(Zeile>>2);i++) SPI_8Bit_oCS(0x00);//
(0x00); //gerade for(sp=0;sp<33;sp++) { SPI_8Bit_oCS(0x00); } cnt++; if (cnt>32) cnt=0; } [/c] Sascha
-
Thread
Umformung hex->dec mit 14 bit
bleibt halt die fragen was dann letztendlich am schnellsten ist. oder eben wirklich jedes gesetzte bit einzeln aufaddieren. sind erstens 11MHz, nur zwei werte die zu wandeln sind und auch maximal zwei abfragen je sekunde. auf jeden fall danke für eure anregungen!
bleibt halt die fragen was dann letztendlich am schnellsten ist. oder > eben wirklich jedes gesetzte bit einzeln aufaddieren. sind erstens > 11MHz, nur zwei werte die zu wandeln sind und auch maximal zwei abfragen > je sekunde. Bei 11 Mhz kannst du locker ein paar Hunderttausend davon pro Sekunde
-
Thread
Pins abfragen mit ICCAVR
, kennt sich jemand mit ICCAVR von Imagecraft aus? Meine Frage lautet: Wie kann man mit ICCAVR einzelne Pins eines Ports abfragen, bzw setzen? Beim C167 gab es die Befehle getbit() bzw -putbit(), gibt es so etwas auch bei ICCAVR. Oder wie setzt ihr einzelene Bits? Waere dankbar fuer eure Ratschlaege
BIT ist die zu lesende Bitnummer wobei CHKB auf 1 prüft und CHKBL auf 0..... CLB und SEB sind zum Löschen und Setzen einzelner Bits. z.B. if (CHKBL(PORTD,4)) { //Anweisungen...wird ausgeführt sobald
-
Thread
Erneutes ausführen von Code-Abschnitten nach Interrupt
Hardware das so einfach mitmacht.../ man nimmt da einfach ein Register und setzt dort ein einzelnes Bit, dies ist das das oben genannte "Hallo-ich hab mal dazwischengefunkt"-Flag. Mir ist noch kein µC begegnet der das nicht gekonnt hätte. 00000000 Interrupt xyz hat nicht dazwischengefunkt 00000001
Sensor vielleicht schon vor 5 mSek gemessen hat und du ihn jetzt erst abrufst. ansonsten dein µC hat doch passende ADC's onboard, wieso dann nicht gleich den passenden Sensor nehmen und auf die SPI Krücke verzichten. *12-bit, 350ksps Analog-to-Digital Converter (ADC) with up to 20 channels Differential
-
Thread
2 Stk. MCP2515 an einem z.B. ATMega32
sind 100ms - so dachte ich das es funktionieren kann selbst wenn ich mit, vorher Bascom und jetzt C selbst was proboiere. Ich bin kein Hardwarprofi und kein Programmierer und studiert habe ich das auch nicht. An hand meiner Forschungen ist sicher ein 32Bit MC mit min 2 internen Can Controllern und
Peter C. schrieb im Beitrag #2469112: > An hand meiner Forschungen ist sicher ein 32Bit MC mit min 2 > internen Can Controllern und 40MHz die beste Wahl sogar noch mit > deutlichen Reserven Auch Deine
-
Thread
Taster Entprellung am Attiny 841 und Auswertung
/ PA7 --> T3 > // PA5 --> T4 > // PB1 --> T5 Das ist jetzt keine Raketenwissenschaft, nur ein Bit überlappt sich. In der ISR die 5 Bits in ein Byte einsammeln: [c] uint8_t i = PINA & (1<<PA0 | 1<<PA5 | 1<<PA7); i |= (PINB & ((1<<PB0 | 1<<PB1)) << 1; // ... [/c]
1<<KEY_3|1<<KEY_4|1<<KEY_5) #define REPEAT_MASK (1<<KEY_1|1<<KEY_2|1<<KEY_3|1<<KEY_4|1<<KEY_5) [/c] Setze die einzelnen Bits ein und schaue welcher Unsinn rauskommt. Wie soll KEY1 und KEY2 unterschieden werden? Damit das halbwegs vernünftig wird müssten mindestens Offsets rein, sodass jedes
-
Thread
if condition schöner schreiben?
fehlen die Klammern um i & 0b11100100 (== bindet stärker als &). Um vom verwendeten Integer-Typ (8 Bit, 16 Bit usw.) unabhängig zu sein, würde man vielleicht besser [c] if((i & ~0b11011) == 0) [/c] oder [c] if((i & ~0x1b) == 0) [/c] oder je nach persönlichem Geschmack auch [
Peter D. schrieb im Beitrag #4885941: > sondern: > [c] > if( PINB & 1<<6 ) > led_off(); > else > led_on(); > [/c] Und hier Frage ich mich nun warum die LED an gehen soll, wenn Bit 6 in PINB nicht gesetzt ist. Warum nicht Bit 7, oder
-
Thread
Mega8 Assembler RGB Fader
; gedrückt worden wäre, wäre ein entsprechendes ; Bit in key_press gesetzt gewesen sbrc temp1, 1 ; <------- Du musst Bit0 abfragen!!! dec ocr_r rjmp main [/avrasm] Fällt dir was auf? Gruß Steffen
Danke für deine Antwort! So ganz verstehe ich aber nicht, worauf du hinaus willst. Das Bit das ich auswerte, hängt ja vom Taster ab, welchen ich abfragen will. Da ich an Pin0-3 Taster angeschlossen habe, ist es also theoretisch egal, welches der 4 Bits ich abfrage, ich muss nur den zugehörigen
-
Thread
Bitweise if-Abfrage durch switch-Anweisung ersetzen
Ist es möglich, eine if-Abfrage zu Stati von einzelnen Bits durch eine switch-case-Anweisung zu ersetzen? [c] ... #define BIT0 0x00 #define BIT1 0x01 #define BIT2 0x04 ... x = 0b01010101; if (x & (1<<BIT0) { ..... } if (x & (1<<BIT1) { ..... } if (x & (1<<BIT2) { ..... } [/c] switch-case-Versuch, der nicht geht: [c] ... switch (x) { case (&(1<<BIT0)): ...; break; case (&(1<<BIT1
-
Thread
AVR- C: Welche einfachen Projekte für den "Einstieg"?
PORT->Group[1].OUTSET.bit.OUTSET = (1 << 30); /* wait for button release */ while ((PORT->Group[0].IN.bit.IN & (1 << 16)) == 0) { } } } return 0; } [/c]
wofür man das Manual durchlesen muss. Ob du nun für die Ausgabe einer PWM sowas brauchst wie: [c] /* * PB16: PWM output to generate V[LCD] * PB16 = TC6/WO[0], function E */ PORTB.PMUX[16 / 2].bit.PMUXE = PORT_PMUX_PMUXE_E_Val; PORTB.PINCFG[16].bit.PMUXEN = 1; [/c] oder
-
Thread
Per UART empfangenen String weiterverarbeiten
case-Fälle immer noch gleich. Einzig im LED-Argument unterscheiden sie sich. -> Funktion dafür machen. [C] void AllBits( char leds[] ) { unsigned char y; for(y=0;y<8;y++) SetBit( leds[y] ); PORTB &= ~(1 << PB2); PORTB |= (1 << PB2); } [/C] und in der Verwendung erhalten wir dann
[x]) { case 0: SetBits( LED_0 ); break; case 1: SetBits( LED_1 ); break; case 2: SetBits( LED_2 ); break; case 3: SetBits( LED_3 ); break; .... [/C] Wow. Nicht schlecht. Der
-
Thread
Verständnissproblem LCD 4-Bit Mode
mehrere davon zum Laufen bekommen, doch nun habe ich nen kleinen Black out. Das LCD ist an Port C PC0-PC3 4-Bit Datenbus PC4-PC7 Steuerbits und Backlight So weit alles gut und schön. Inn allen Sourcêcode beispielen findet mann, das die Bits geschoben werden und dann auf den Port Kopiert.
einer solchen Konstelation >gemacht. Ja, viele Anfänger die noch nicht verstanden haben wie man einzelne Bits in einem Port manipuliert ohne den Rest zu beeinflussen. MfG Falk
-
Thread
Wie Kodierschalter auswerten?
Hi >Aber so muss ich dann 16 Zustände abfragen. Oder gibt es da eine >schlauere Variante? Die vier Bits ergeben schon die Zahl. Wenn du den Schalter an Pin0..3 eines Ports anschließt reicht (Pseudocode) zahl = (PINx & 0x0F) MfG Spess
El Nino schrieb im Beitrag #2140528: > Aber so muss ich dann 16 Zustände abfragen. Oder gibt es da eine > schlauere Variante? Ja. [c] zahl = ~PINC & ((1 << PC2) | (1 << PC3) | (1 << PC4) | (1 << PC5)) [/c] Gruß
-
Thread
Logikbausteine mit AVR realiesieren
kenn sich keiner mehr aus was überhaupt abgefragt wird, UND verknüpft wird usw.... Wie kann man einzelne Bits beim Atmel abfragen und das CarryBit complimentieren? Oder kann man da nur mit Registern arbeiten? Vielen Dank im vorraus! Gruß Dirk
Dirk wrote: > > Wie kann man einzelne Bits beim Atmel abfragen Du meinst von einem Port? Mittels cbis und sbis, aber das hilft dir nicht viel. AVR sind Risc Prozessoren, für fast alles muss der entsprechende Wert in einem Register
-
Thread
16bit-Register im ATmega8 ASM
Es gibt bei einem 8-Bit-Controller nunmal nur 8-Bit-Register. Punkt. Wenn Du aus zwei solcher Register ein 16-Bit-Register machen willst, dann musst Du in Kauf nehmen, dass i.d.R. zwei Operationen erforderlich sind, um eine
den entsprechenden 'XYZdef.inc-Dateien'. D.h. du brauchst da nichts selbst definieren. Auf die einzelnen 8-Bit-Register kannst du auch mit beispielsweise XL(r26) oder XH(r27) zugreifen. Für deine Zwecke würden sich die Befehle adiw/sbiw anbieten. Mit diesen Befehlen lassen sich von X, Y, Z sowie r24
-
Thread
PIN bei Atmega128 abfragen
Bitwert abfragt. Es funktioniert also nur zufälligerweise dann, wenn der abzufragender Bitwert Bit 0 ist. Wie kann ich dann andere Bitstellen bzw. Port auf 0 Abfragen? Wieso funktioniert eigentlich nicht folgende Abfrage: if (PINC2 == 1) oder if (PINC2 == 0) wäre doch ein logischer
Zustand, der Abgefragt ist. Leider funktiniert es nicht im Contoller. Erkennt er die Zustände der einzelner Bits nicht?
-
Thread
µC - Alles auf einmal! (Design-Pattern)
das ist die Generierung des Videosignals. Das ist so zeitkritisch, dass es tatsächlich auf jeden einzelnen Taktzyklus ankommt und dann kommt man mit C nicht mehr weiter. Aber abgesehen davon, fällt mir jetzt nichts weiter ein, was tatsächlich Asm erzwingen würde.
Buchegger schrieb im Beitrag #2545371: > Das ist so > zeitkritisch, dass es tatsächlich auf jeden einzelnen Taktzyklus ankommt > und dann kommt man mit C nicht mehr weiter. Ulrich Radig z.B. hat es in C geschafft[1]. [1] http://www.mikrocontroller.net/topic/101429#882288 Gruß Oliver
-
Thread
manuelles und automatisches Placement
>> Nun habe ich das Problem, dass ich beim einfügen einer simplen weiteren >> if oder case Abfrage Probleme bekomme das was du da vor dir hast ist kein µC. Ein scheinbar "simples" if kann große Folgen haben. Bsp : vergleiche mal einen 32bit Vektor auf (31 downto 0 => '0'). Bei 4er Luts
: > XC3SD1800A > 160Mhz DDR Das ist m.E. schon ganz schön sportlich. > An einer weiteren Abfrage, welche Bits auf den Ausgangsbus gelegt > werden, scheitert es nun. Soll das so'ne Art Vorverstärker werden? Welche Bits musst Du wie schnell selektieren? Wie oft verändert sich das (Selektions-
-
Thread
Immer noch Fehler!
Das hier [C] // gesendet wurde erst Low-Byte dann High-Byte gap[a] = ((unsigned int) letter[(i+1)]) | (unsigned int) letter[i]; [/C] stimmt auch nicht du musst letter[i+1] schon um 8 Bits nach links
wie sie wollen, sie beeinflussen das Ergebnis nicht. Bei PINC == 0x80 müssen die anderen Bits alle 0 sein. Ist auch nur eines davon nicht 0, wird die Abfrage schief gehen, selbst wenn Bit 7 auf 1 steht.
-
Thread
Alternative zu PORTB.0
, was Du brauchst... Sind aber eigentlich absolute C-Grundlagen (zumindest die Operatoren sollte man eigentlich kennen...) EDIT: Sehe grad, dass Du offensichtlich doch was anderes meinst. Einzelne Bits werden mit & bzw. | (UND mit dem Komplement der
= (PORTB & 0xFE) & (data & 0x01); [/c] (Das letzte Bit von PORTB wird durch das letzte Bit von /data/ ersetzt)
-
Thread
Unterschied?
stellt eine logische UND Verknüpfung dar https://www.mikrocontroller.net/articles/Logische_Verkn%C3%BCpfungen und zwar bitweise (je 'Bit-Stelle').
Handwerkszeug, das *mußt* du lernen. Oder du läßt das mit dem Programmieren. Lies den Abschnitt über C Operatoren in deinem bevorzugten C-Buch (oder https://de.wikibooks.org/wiki/C-Programmierung:_Ausdrücke_und_Operatoren). Speziell zu den Bit-Operatoren, die hier gebraucht werden, hat auch das hiesige
-
Thread
I/O-Pin Abfrage
ARM7 und Crossworks. Bin noch am Anfang. LED an/aus geht schon :-) Möchte jetzt einen Taster abfragen, ohne Interupt. Wenn ich das Register FIO2PIN als gesamtes Register abfrage geht es, aber wie kann ich ein einzelner Pin abfragen? Bei WinAVR ist das ja z.B.: if (bit_is_clear(PIND,3)) Danke
1 << (pin) ) ) ) ... if( bit_is_clear( FIO2PIN, FIO2PIN2 ) ) ... [/C]
-
Thread
Input-Abfrage
Hi bit_is_clear bzw. bit_is_set solltest du nicht verwenden da die Funktionen veraltet (deprecated) sind. Verwende den Syntax wie von Thomas Berger und mir beschrieben. >> und << sind die Bitshift-Operatoren von C. Matthias
-
Thread
Datenübertragung (SPI) ich kapiere es einfach nicht
ok also "prizipiell" wie beim onewire. aus writebyte() wird dann der string in einzelne bits zerlegt und einzenld "geschoben". und wie/woher erfährt der master ob der slave 8 oder 100 bit übertragen soll, oder ob es denn nur 1 oder 10 verschiedene variablen sind?
master dem slave "gibt mir den inhalt der variable xyz" der slave sagt dem master "das sind x bits" und schreib die daten ins spi register der master sendet die "leeren" bits zum slave der slave antwortet dem master mit den "vollen" bits der master beendet die abfrage. kann ich mir das
-
Thread
Mehere PWM's für RGB LED
unnötig verlansamt. Ansonsten könntest du ja mal nen Blick auf den PCA9532 werfen, das ist ein 16 Bit I2C LED Dimmer.
, Clock und Output Enable. Wenn du soviel Hardware meiden möchtest, dann würde ich dir einen STP16C596 wärmstens empfehlen. Dann bräuchte man für diese Schaltung nur mehr 3 STP16C596 und 3 Widerstände, mit denen man den Strom jedes einzelnen Schieberegisters steuern kann (ich glaube bis zu 120mA pro
-
Thread
Aufbau Statemaschine
uprg2(); state = 3; break; case 3: uprg3(); if (!get_input_bit(IO_INPUT_1)) // Abfrage S3 Port delay(20); // Pause Entprellung 20 ms if (!get_input_bit(IO_INPUT_1)) // Abfrage S3 bei loslassen while (!get_input_bit
Eine Einrückung macht es leserlicher. > case 3: > uprg3(); > if (!get_input_bit(IO_INPUT_1)) // Abfrage S3 Port > delay(20); // Pause Entprellung 20 ms MÖÖP! Hier nicht! > if (!get_input_bit(IO_INPUT_1)) // Abfrage S3 bei loslassen
-
Thread
Anfänger fragen zur Programmierung des Atmega32A in C
werden? Oder ist das nur auf Port C? Wenn es nur Port C wäre, kann meine vermutung das DDRC auf Port C verweist ja nicht stimmen... und wofür steht die 254? [code] PORTC &= 255-_BV(0); // 0 auf Bit 0 Ausgeben, Rest so lassen
genau? Das kommt von deinem Compiler. Definiert dürfte das ganze in der avr-libc header sein. [c] #define _BV(bit) (1 << (bit)) [/c] Ich denke, somit dürfte sich der Befehl von alleine erklären. ;) Martin Kathke schrieb im Beitrag #3693219: > Frage 2.1.1 : Steht die 0 in _BV(0) für die Pin
-
Thread
EleLa - Elektronik Lagerverwaltung V3.1
Satz eindeutig zu identifizieren. Ja ist schon doof, die Zeilennummer statt ID auszugeben Die einzelne numerische Zeile 4128 wäre: [c]SELECT * FROM `foto` LIMIT 4128, 1;[/c] zum löschen DELETE statt SELECT. Nachtrag: oups, war zu langsam
. schrieb im Beitrag #6270907: > (armv8l) using readline 5.2 ^^^^^^ Hoppala, du fährst die 64-bit Armbian? Weist schon dass die noch ganz frisch ist und erst seit Raspi4 das coming-out hat? Auch wenn die SoC seit Jahren schon 64-bit ist. Das könnte ein Punkt werden. Behalte das mal im Auge.
-
Thread
Geschwindigkeit Arduino > C
Die libraries sind nicht überall so viel langsamer. Das setzen einzelner Bits ist schon so etwas wie ein worst case Beispiel. Bei vielen einfachen Rechenfragen gibt es gar keinen Unteschied zu normalem C Code. Bei so etwas wie UART / I2C kann man es von Hand auch
@ Michael U. (amiga) >Ich quäle auch keine µC, allerdings ist Multitasking z.B. auch keine >µC-Domäne, zumindest nicht in der 8Bit-Klasse. Quark. Jedes halbwegs komplexere Programm macht [[Multitasking]]. Das geht auch ohne Linux und Win10!
-
Thread
Entprellen in C, schlanke Routine
entsprechende Bit in key_press (in ASM, die Namen in C kenne ich nicht, dürften aber ähnlich lauten) gesetzt, also das Tastenflag, das dem Hauptprogramm einen neuen Tastendruck meldet. Jede Taste hat also folgende
"taktet" den taster ein. es wird eine 0->1 flanke erkannt, sobald das letzte bit (in dem falle bit 7) 0 und alle anderen bits 1 sind. eine 1->0 flanke sobald das letzte bit 1 und alle anderen 0 sind. irgendwelche zwischenzustände ändern nichts am taster-zustand (was in dem falle
-
Thread
I²C Sensor antwortet nicht
Sobald ich den Sensor jedoch an den MSP hänge, bleibt das Programm an folgender Funktion hängen: [c] unsigned char I2C_notready(){ return (UCB0STAT & UCBBUSY); } [/c] Der Takt ist das auf HIGH und die Datenleitung auf LOW und nüscht tut sich mehr. Vorher wird ein transmitinit ausgeführt (von TI übernommen): [c] P3SEL |= SDA_PIN + SCL_PIN; // Assign I2C pins to USCI_B0 UCB0CTL1 = UCSWRST; // Enable SW reset UCB0CTL0 = UCMST + UCMODE_3 + UCSYNC; // I2C Master
-
Thread
Massive IO Porterweiterung - Stabilität des IO - mehrfaches SPI
verschaltet. Trotzdem "sieht" der Tastaturcontroller die Tasten logisch als einen langen Vektor von Bits. Auf der Programmseite wird sowas typischerweise dadurch gelöst, daß man die logischen Zustände in geeignete Datenstrukturen stopft (z.B. C structs) und Ein- und Ausgabe in Funktionen packt. Der
Grundgefühl sagt mir: Ich kaskadiere einfach mit SPI durch mehrere Bausteine, halt zum Beispiel 4 16bit Input-Platinen... oder was ist nun der Vorteil von I2C? Danke und sorry nochmal!
-
Thread
RS485 bus mit Fleury Uart
[c] while(1) { received = UDR0; [/c] Da fehlt jeglicher Test, ob überhaupt ein neuer (gültiger) Wert im UDR drin ist. Du liesst da u.U. Zwischenwerte aus, falls die Bits von der Hardware einzeln
hab mit der debug led folgendes festgestllt: in der ISR wird die erste if-Abrage durchlaufen [c] if (NET_UCSRA & ((1 << FE0) + (1 << DOR0))) [/c] geht in die nächste if-Abfrage rein [c] if (NET_UCSRB & (1 << RXB80)) // OK mit 9. bit [/c] und bleibt schließlich bei der Adressabfrage hängen
-
Thread
Com Port Zugriff unter Windows 7 64 bit mit C++
weiß nicht genau, warum (vor allem C/C++ Programmierer?) immer das rad neu erfinden müssen gibts bei "euch" keine fertigen libraries ...
zitat: C:\>javac ListPorts.java C:\>java ListPorts Serial port: COM7 Serial port: COM10 Serial port: COM3 Parallel port: LPT1 Parallel port: LPT2 ist das jetzt die C platte von einem solaris oder linux
-
Thread
1" Full-Color-OLED
Heißt »Klappt nich« jetzt a) das Programm bleibt dort hängen (Bit wird nie low) b) das Programm verhält sich wie ohne Abfrage (Bit ist immer low) c) das Programm verhält sich noch anders (nämlich?) Meist ist es in solchen Fällen ja irgendein Mist, daß man den
Staus noch jedem LCD-Kommando abgerfragt werden. Bsp. Ein Pixel setzen, anschließend Status abfragen Diesen Status, also die Pegel aller LCD-PINS kannst Du Dir ja separat anzeigen lassen. Notfalls wird das Programm testweise an dieser Stelle mal gestoppt, vorher alle µC Pins auf Eingang und
-
Thread
Webserver ATmega32/644DIP ENC28J60
Hallo, Die FuseBits werde im makefile gesetzt. [c] #Fuse settings for ATmega644 ifeq ($(MCU), atmega644) FUSE_BITS = -u -U lfuse:w:0xff:m -U hfuse:w:0xdf:m HEX_FILE_NAME = MEGA644 endif #Fuse settings for ATmega32 ifeq ($(MCU), atmega32) FUSE_BITS = -u -U lfuse:w:0xff:m -U hfuse:w:0xcf:m HEX_FILE_NAME = MEGA32 endif [/c] Gruß Ulrich
-
Thread
PPS5330 Labor-Netzteil hack
newest 4-bit CPU core, SAM47 (Samsung Arrangeable Microcontrollers). With an up-to-896-dot LCD direct drive capability, flexible 8-bit and 16-bit timer/counters, and serial I/O interface, the S3C72P9 offers an
function and in pin configuration except that S3C72P9 have a 32,768 ×8-bit ROM, 1056×4-bit RAM, 12 common selectable and LCD contrast control function. OTP The S3C72P9 microcontroller is also available in OTP (One Time Programmable) version, S3P72P9
-
Thread
if(a) oder besser if(a == 1)
ergibt. Was hier nicht der Fall ist. Hier passt eine Enumeration besser. Wenn das auf's allerletzte Bit optimiert werden muss: if(a != 0) kann je nach Prozessor schneller sein als if(a == 1). Wenn die Variable global ist und es sich um AVRs handelt: Für einzelne Bits haben diverse AVRs 3 freie Bytes
movw r24,r18 ret [/avrasm] Die gleichen Kapriolen macht er wenn man auf Bit 15 von y testet und auch, wenn man das Testergebnis in eine Zwischenvariable speichert: [c] int foo (int y, int z) { char x = y < 0; if (x) return z; return 0; } [/c]
-
Thread
Atemega328p - schaffst du das?
. für die bluetoothkompatible Baudraten. c-hater schrieb im Beitrag #4638046: > Der Trick ist: betreibe die UART als SPI-Master bei deutlich > höherer Bitrate und benutze mehrere ihrer Bits (wobei "mehrere" nach > einem sinnvollen Muster um +-1 variiert) für ein effektives Bit auf der > Leitung interessant. c-hater schrieb im Beitrag #4638046: > Ziemlicher Kinderkram für Leute, die wirklich programmieren können, aber > für FanBoys natürlich... Das erste Mal, dass
-
Thread
Bit in einem Byte setzen/rücksetzen (schnell und möglichst direkt) in c
[c] // Bit setzen: byte |= (1 << bit); // Bit löschen: byte &= ~(1 << bit); [/c]
Max G. schrieb im Beitrag #2822234: > Und das packt man dann am besten in ein Makro BIT_SET() oder so ähnlich. Warum nur? BIT_SET wäre für mich eine geeignete /Abfrage/: if (BIT_SET(x,y)) {} Wenn schon, dann sollte das Makro SET_BIT() heißen... Und weil das Makro auch eine ganze
-
Thread
Probleme mit einem Programm In C für PIC 12F629
Watchdog und eigener Zeitschleife? - Unter einem Basic-Compiler hatte ich das Problem, daß beim 12F629 Bits des GPIO nicht einzeln gesetzt werden konnten, sondern der gesamte Port beschrieben werden mußte. Viel Erfolg Airwulff
den Fehler in meinem Programm findete warum immer nur der letzte Ausgang gültig ist : #include <C:\Dokumente und Einstellungen\luger norbert\Eigene Dateien\Norbert\Elektronik\PIC\C Compeiler\12F629.H> #pragma config |= 0b.11.0001.1101.1100 // Konfigurations-Wort bit schalter
-
Thread
mit CAN Bus Fensterkontakte abfragen.
Hallo, Ich plane in unserem Haus alle Fensterkontakte (offen/geschlossen/gekippt, verriegelt/entriegelt) abzufragen und einer zentralen Hausautomatisation weiterzugeben. Erster Gedanke das Alles über KNX/EIB zu lösen erscheint mir letztlich zu teuer (Anzahl der Binäreingänge ist doch beachtlich). Ausserdem ist da zu wenig Bastelei dabei und Zeit hab ich ja noch ein wenig. ;) Mein Plan würde nun so aussehen: - ein Kabel (Cat6 oder EIB) ausgehend vom Schaltkasten von Fenster zu Fenster; Über das Kabel erfolgt Stromversorgung (12V ggf. wenn am Ende genug Spannung rauskommt auch etwas weniger
-
Thread
while( ) >>> mit Bedingungen
nur das Bit von PB5 übrig: PINB a b c d e f g h 1<<PB5 0 0 1 0 0 0 0 0 ----------------------- Result 0 0 c 0 0 0 0 0 Falls du aber wissen willst, ob keines der Bits von PINB ohne PB5 gesetzt ist,
Was spricht eigentlich gegen die Verwendung der Makros "bit_is_set" bzw. "bit_is_clear"? [c]bit_is_set(PINB, PB5)[/c] Könnte doch einige Verwirrung vermeiden. Und wenn man partout den Programmablauf unterbrechen will gibt es "loop_until_bit_is_set" bzw
-
Thread
24 Lichtschranken mit dem PC überwachen
würd ich mir einen STK500 + ATMega32 besorgen der hat die serielle sowie 32IO´s... der hat einen 16 bit counter sowie 2 8bit....baudratenquarz.... Und für Anfänger tuts auch Bascom oder für härtergesottene c.....
Pins. Du musst nur in regelmäßigen Abständen drei Ports auslesen (pollen bzw. Timer-ISR) und die Bits auswerten. Ab und an schnürt der ATMEGA dann ein Päckchen und versendet es via RS232. Wenn du aber auf einmal 32 Lichtschranken abfragen willst, gehen dir die Pins aus.
-
Thread
Probleme bei Programm (Assembler)
0b00100011 cpi r16, 0b00100001 breq L2 Seh ich das richtig,das du lediglich einen Taster an PortC.5 angeschlossen hast und damit eine LED an PortC.0 steuern möchtest?Wieso maskierst du dann auch die Bits 0 und 1?Oder möchtest du noch einen Schalter an PortC.1 mit einbeziehen? Schau dir vielleicht
Interrupts) ist allerdings immer die selbe.Es werden stets in einigen Register(n) einzelne Bits gesetzt,die dann festlegen,wie der Timer funktioniert. http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Die_Timer.2FCounter_des_AVR
-
Thread
Optimierung und Forumlierung paralleler Statemachines
Code. In C ist das egal, weil es einfach Flash belegt und beim Einsprung 2-3 Abfragen mehr braucht. In VHDL ist es so, dass mehr hardware angefordert wird, die meines Wissens bei der Synthesumsetzung wieder
Namens zusammengefast, wenn sie zu allen Zeiten die gleichen Werte haben. Es wird sogar erkannt, wenn Bits sich nicht ändern, weil eventuell eine Adresse nicht richtig dekodiert ist und als Folge alles, was von diesem Bit abhängt, statisch codiert.
-
Thread
Atmega8/1 PortPin als Bit speichern
bei Atmels nicht mit z.B. PA2 ?? Nein, das geht beim WINAVR-Compiler nicht (und ist auch nicht ANSI-C). Was aber gehen könnte, ist [c] bitfield.bit = 1 && (PIND & (1 << PIND2)); [/c]
wie wäre es mit bitfeld.bitA = !!(PIND & (1 << PIND2) in c99 dürfe auch das gehen: bitfeld.bitA = (_Bool)(PIND & (1 << PIND2)
-
Thread
AVR: long/eine Zahl aus 3 einzelnen Bytes/Chars erzeugen
so zum Beispiel: [c] long l; ((char*)(&l))[0]=size[0]; ((char*)(&l))[1]=size[1]; ((char*)(&l))[2]=size[2]; return l; [/c] oder so: [c] return ((long)(size[0])<<16)+((long)(size[1])<<8)+((long)(size[2])<<0); [/c] MfG Mark