-
Thread
Wie funktioniert JTAG?
vom eingespeisten Wert im jeweiligen IR-Scheibchen des entsprechenden Core ab. Wenn dir die einzelnen Längen der IR schon aus dem BSDL-File kennst, gibt's ev. noch undokumentierte Befehle zu erraten. Wenn nicht, musst deine Detection per Einzelschrittigem Durchclocken von '1' bits die einzelnen
11 Bits Manufacturer Identity (JEDEC genormt) 1 Bit LSB (immer '1') Die Hersteller-Bits wären also: 110 1100 0000 (= 0x6C0). Jedec spezifiziert hier aber eigentlich nur 8 Bits (siehe https://www.mikrocontroller.net
-
Thread
c: Wie multiple return-Statements vermeiden?
while (!READ_BIT(registerStruct->ISR, I2C_ISR_TC)); } // Send stop condition SET_BIT(registerStruct->CR2, I2C_CR2_STOP); return receive_count; error: // Restart the I2C peripheral CLEAR_BIT(registerStruct->CR1, I2C_CR1_PE); SET_BIT(registerStruct->CR1, I2C_CR1_PE); //ITM_SendString("I2C bus error!\n"); return receive_count; } [/c] Ich glaube das ist das einzige Szenario
-
Thread
Video Streaming STM32 -> Z80
Hi Sean Goff, der Z80 hat ASM Befehle zum abfragen von einem einzelnen Bit (ob gesetzt oder nicht) und zum setzen von einem einzelnen Bit abfrage : BIT b,r (8 Takte) setzen : SET b,r (12 Takte) dazwischen brauchst du noch einen Jump (if Zero
Uwe B. schrieb im Beitrag #3562085: > der Z80 hat ASM Befehle zum abfragen von einem einzelnen Bit > (ob gesetzt oder nicht) und zum setzen von einem einzelnen Bit Danke, jetzt wo dus sagst sehe ich es auch. Dann werde ich es wohl mit 8 BIT abfragen mit Jump machen.
-
Thread
Aufwärmzeit DS18B20 Sensoren
Serial.println(); // Convert the data to actual temperature // because the result is a 16 bit signed integer, it should // be stored to an "int16_t" type, which is always 16 bits // even when compiled on a 32 bit processor. int16_t raw = (data[1] << 8) | data[0]; if (type_s) {
// at lower res, the low bits are undefined, so let's zero them if (cfg == 0x00) raw = raw & ~7; // 9 bit resolution, 93.75 ms else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms else if (cfg == 0x40) raw
-
Thread
Byte auf verteilten Ausgängen ordnen
Für die 4 Bits der jeweiligen zwei Ports könnte man jeweils eine Translation table anlegen und dann 4 Bits zugleich schreiben, statt alle Bits einzeln.
t außen drauf, wenn du nicht immer jedes Bit einzeln setzen/löschen willst.
-
Thread
LED Tisch mit Berührungs-/Gegenstandserkennung
Anforderungsprofil angelegt werden. Zum einen steht da die Hardware: - LED: RGB oder RGBW - µC: Anzahl PWM-Ausgänge (8bit, 16bit, 32bit)? - µC: Kommunikationsarten? Anzahl der Ports für Kommunikation - µC: Art der Programmierung (SPI, JTAG,...) - µC: Anzahl weitere benötigter Pins inkl. Funktionen
G. schrieb im Beitrag #3686659: > Zum einen steht da die Hardware: > - LED: RGB oder RGBW > - µC: Anzahl PWM-Ausgänge (8bit, 16bit, 32bit)? 3x PWM RGB (evtl. HSV Farbmodell), 1x PWM IR-LEG (wenn nicht anders angesteuert wird) > - µC: Kommunikationsarten? Anzahl der Ports für Kommunikation bei
-
Thread
DMX empfang in C funktioniert nicht richtig.
Das [c] if(1<<FE) [/c] ist natürlich Quatsch. Denn dieser WErt ist immer wahr. Was du oin wirklichkeit wolltest. Du wolltest ein Register befragen, ob dort drinnen das bewusste FE Bit auf 1 ist oder
) [/c] sondern [c] if( PINB & ( 1 << PB0 ) ) [/c] also die Kombination aus: Nimm das Register PINB her und betrachte nur das Bit PB0 - ist das 0 oder 1? Und hier bei dir ist das nicht anders. Das
-
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
Arduino: Ist boolean intern als Bit oder byte (char) organisiert?
einer uint8_t Variable halten bzw. bearbeiten. Ich sehe hier niergends boolean ins Spiel kommen. Zur Abfrage einzelner Bits in einer solchen Variable hat C/C++ leistungsfähige Operatoren. Siehe [[Bitmanipulation]]
Bits in den höheren Registern und einzelne Bits >> im Statusregister. > > Mit Verlaub, im Kontext von C ist das schlicht falsch. Im Kontext von C > bedeutet "adressierbar", daß der & (vulgo: "address-of
-
Thread
eBus USB Adapter
Aktuelle Raumtemperatur Heizkreis 2: [code]ff15b52406020003010f00 / 0801030f00cd4ccc41 = 25.5000°C ff15b52406020003010f00 / 0801030f00cd4ccc41 = 25.5625°C[/code] Hier scheint "cd_c____" immer statisch zu sein und das 2. Byte ist immer entweder 4c oder cc, es zählt nur das höchste Bit zur Temperatur
negativ einstellen kann: "AT Durchheizen" [code] ff15b52406020000000200 / 08030002000000a040 -> 5°C ff15b52406020000000200 / 0803000200000080bf -> -1°C ff15b52406020000000200 / 08030002000000c8c1 -> -25°C[/code] Somit stimmt es - das höchste Bit gibt das Vorzeichen an, alles andere bleibt:
-
Thread
RGB Tastenfeld in 5x4 Sonderform
key_event.key_number)] = (224, 224, 224) Starte_prg_von_taste_5 end if Du musst diesen BASIC - Code jetzt in C umwandeln. Hier die Erklärung für IF-THEN abfragen unter C https://www.delftstack.com/de/howto/arduino/arduino-if-statement/ Und hier hast du eine Erklärung wie man gewisse Sachen in Arduino-C
gleich gibt (deshalb das abtippen). Ich persönlich mache 0-9 und dann mit Buchstaben weiter. In der Abfrage schreibe ich im Kommentar dann dahinter was ich damit will. z.b. keypadEvent e = customKeypad.read(); Serial.print((char)e.bit.KEY); if (e.bit.EVENT == "E") { ' funkt Taste e
-
Thread
MCP23017 - Einzelne Pins auf High schalten
Bei Arduino gehts auch ohne Wissen über den uC. Irgendwo steckt sicher die Bitmanipulation, sie ist für dich aber nicht sichtbar. Ich kenne den MCP nicht, wenn er keine Funktion zum setzen einzelner Bits hat würde ich den MCP auslesen, das Bit ändern
Max H. schrieb im Beitrag #3580827: > Bei Arduino gehts auch ohne Wissen über den uC. Irgendwo steckt > sicher die Bitmanipulation, sie ist für dich aber nicht sichtbar. > Ich kenne den MCP nicht, wenn er keine Funktion zum setzen einzelner > Bits hat würde ich den MCP auslesen,
-
Thread
Tasterabfrage
von oben } else zustand = neuer_zustand; // Synchronisieren return zustand; } [/C] Und in main() dann [C] schalter = taster_abfrage(UNDEF); ... // EIN/AUS Taster auf WECKTASTER synchronisieren taster_abfrage(EIN); [/C]
. > Ist das jetzt so einigermaßen richtig gedacht? Jo. Statt MODULO 2 kann man auch das letzte Bit abfragen mit dem BIT-UND Operator &. Das ist in der frischen Source so.
-
Thread
Bits shiften - ich verstehe es nicht.
Ziel = 0; if Quelle.bit=0 then ziel.bit=1; und dann einfach 11 weitere ifs. In Assembler sind das je nach Prozessor so ~27 Befehle (3 clr, 12x bit test und bit set). In C etwas mehr zu schreiben, aber ebenfalls trivial
Er wills ja gar nicht in eine 16bit-Zahl haben, sondern in 3 einzelne chars. NegativeOne! schrieb im Beitrag #6004968: > und dabei auf drei 8-bit Variablen verteilen.
-
Thread
COM-Port, FT232 Kommunikation mit Integer?
Peter schrieb im Beitrag #4170575: > Klappt wunderbar, > allerdings wird jede Zahl einzeln als String geschickt, das ist nicht > besonders effizient. das würde aber kaum etwas ändern. Deine Übertragung ist so langsam, weil du jeden Wert einzeln abfragst. Damit bringt es fast nichts,
Hex-Digits + \n): > 38400 / 10 / 5 = 768 Hz nein kann man nicht. Es kommt ja noch die zeit für die Abfrage dazu. Dann kommt auch noch die Verbartungszeit auf beiden Seiten dazu weil es scheinbar ein synchrones Protokoll ist. PC -> µC "b1\n" 3byte µC verarbeitet ? ms µC -> PC 1234\n 5byte
-
Thread
C: Pixel auf dem Bildschirm ausgeben
erstaunt), dann > kann man es natürlich weiterhin benutzen. Es gibt ja auch Leute, die > noch mit einem C64 arbeiten. Vom C64 habe ich mich getrennt. Mit nur drei 8Bit-CPU-Register ist es wirklich eine Qual hardwarenah zu programmieren, weil man eigentlich extrem of 16Bit-Werte und größere Werte verarbeiten
Der Unterschied zwischen 24 und 32 Bit liegt hier nur daran, daß bei 24-Bit nicht ein ungenutztes Byte für jedes Pixel herumliegt, was die Berechnung der Adressen der einzelnen Pixel natürlich einen Hauch komplizierter macht. Mehr als
-
Thread
Display mit Touchscreen bei Pollin?
lcd_writestringP() liest den String aus dem Flash. Was du brauchst ist eine neue Funktion, welche die einzelnen Zeichen aus dem RAM mittels lcd_writechar() ausgibt. Könnte ungefähr so aus sehen: [c] void lcd_writestring(const char *string) { char c; for(;;) { c = *string++; if (!c)
Könnte evtl schon helfen... Hab ja bis jetzt immer 8bit ( 0xFF), also einen Strich auf entsprechender Höhe, aber sobald ich einzelne Bits setze und beim nächsten ADC Durchgang mit LSR das nächste Bit setzen will, bis alle 8bits nacheinander geschrieben wurden
-
Thread
Möglichst Resourcenschonend programmieren
runterlaufen lassen. Variable auf Startwert. Warten bis Wert erreicht. Kostet eine Variable 16bit, inkrement und Abfrage in der ISR, Abfrage am Ort des Geschehens. ---
16 #define Factor (uint32_t) ((RefA / (AdcRawH - AdcRawL)) * Scale) // Steigung zur Basis 2^16 [/c] Dieses Spiel kann man beliebig treiben. Hier habe ich sogar noch 2BIT abgeschnitten (F2013 hat nen 16BIT Wandler an Board).
-
Thread
Attiny als schieberegister
im zweiten Takt je nach Wert des zweiten Bit etc: [c]Tosnes = !(keys & (1 << N));[/c] Sorry, müsstest du halt von C nach BASIC übersetzen. Da die variable Schiebeoperation auf dem AVR auch nicht gerade das Gelbe vom Ei ist, besser: [c
. Es gibt nur noch einzelne Bits. Zugegeben, das Beispiel in meinem letzten Post war etwas sehr knapp. Hoffe, jetzt wird es etwas klarer.
-
Thread
ATmega328P; Bit setzen/löschen eines Integers klappt nicht.
Code: [c] void funktion_abrufen() { //NUR WENN DER PUFFER = 0 IST WIRD DAS BIT GESETZT puffer=0; //Pinstatus abfragen if (PINB & (1<<0)) puffer |= (1<<bit); //und Bitweise den Integer verändern
Binär eine 1, welche ja nur ein Bit benötigt. Ich habe jetzt wieder und wieder versucht und ich glaube dem Problem auf der Spur zu sein... ich habe in der main Schleife eine Abfrage die so aussieht [c] if (puffer==1<<0) PORTC |
-
Thread
µC-Schaltung spielt nach 5 Jahren verrückt
Mein erster Schritt war, die Firmware auszulesen und gegen unsere Kopie zu verifizieren - jedes einzelne Bit stimmt. Der zweite Schritt war dann, ein Test-Programm hochzuladen, mit dem ich die einzelnen Ein- und Ausgänge abfragen/setzen kann, um den µC selbst zu überprüfen. Alles ok. Trotzdem spielt
Mein erster Schritt war, die Firmware auszulesen und gegen unsere Kopie >zu verifizieren - jedes einzelne Bit stimmt. Der zweite Schritt war >dann, ein Test-Programm hochzuladen, mit dem ich die einzelnen Ein- und >Ausgänge abfragen/setzen kann, um den µC selbst zu überprüfen. Alles ok. Mein erster
-
Thread
I²C Problem: verlorene Bytes
einleiten WriteI2CHostRegister (HostControl, 0xff50); // senden ResetSI (); // Status abfragen *I2CSTAT = ReadI2CHostRegister(HostStatus) & 0xff; // return I2CSTAT; }[/c]
einleiten WriteI2CHostRegister (HostControl, 0xff50); // senden ResetSI (); // Status abfragen *I2CSTAT = ReadI2CHostRegister(HostStatus) & 0xff; // return I2CSTAT; [/c]
-
Thread
Python Uart einlesen und ausgeben
Zuerst Danke für deine Antwort, also das Problem hast du richtig erkannt dass ich nicht alle If Abfragen schreibe... nur ist es möglich die If Abfrage so zu kürzen dass bei 1111 1111 alle 8 LEDs ZUSAMMEN leuchten? oder funktioniert das nur einzeln?
und der Bitstream ins Spiel. So wie ich es oben beschrieben habe kann er bei 8 LEDs mit 8 if-Abfragen bei jedem Wert von einem 8Bit-Wert jede Möglichkeit an LEDs an/ausschalten. Auch gleichzeitig. D.h. bei 0000 0001 wird nur LED1 eingeschaltet und bei 0100 0001 LED 1 und LED 7.
-
Thread
Operatoren verstehen
stimmt nicht -- und Dank Deines Einwandes ist mir inzwischen auch klar, wieso. Nehmen wir mal [c] a = b & c; [/c] Hier ist der Sachverhalt völlig klar: Jedes Bit von b kann unabhängig vom korrespondierenden Bit in c den Wert "0" oder "1" annehmen. Das gilt umgekehrt auch für die Bits von c, die unabhängig vom korrespondierenden Bit in b den Wert "0" oder "1" haben können. Es ergeben sich die bekannten vier Belegungsmöglichkeiten für die korrespondierenden Bits von b und c, und daraus
-
Thread
Moodlight Sourcecode hilfe
? By the way: Du kannst das Array pwm_settings eins kleiner Dimensionieren, und auch die if-Abfrage in der ISR rausnehmen. Ändere doch auch mal den Prolog mit den 8MHz ;) In Main.c : [c] // Timer 1 OCRA1, als variablem Timer nutzen OCR1A += (uint16_t)T_PWM; TCCR1B = 9;
//Hier kann man die 100Hz abgreifen else pwm_cnt++; } [/c] Es dürfte also geschickter sein mit einer 16Bit-Variable zu Timern... [c] volatile unit16_t mood_timer; // Zähler ist Global ... PWM_PORT = tmp; // PWMs aktualisieren
-
Thread
Mehrfache if.Verkleinern
Brummbär schrieb im Beitrag #5977590: Das geht zwar in einigen Skriptsprachen, aber nicht in C/C++. Das geht zwar in einigen Skriptsprachen, aber nicht in C/C++. Mein Code läuft einwandfrei nur halt mit den vielen IF abfragen, ich denke Arduino ist C++
Stefanus F. schrieb im Beitrag #5978580: > Der linke Teil ja, der rechte Teil ist die Abfrage. Öhm...auch nicht. Der rechte Teil ist einfach nur eine Verknüpfung. Abgefragt wird da nix. Du hast hier sicher die Pin-Abfrage im Kopf nach dem Schema [c]if(PINB && (1 << PB0))[/c] if fragt
-
Thread
Logamatic 2107 Schnittstelle
noch folgendes an die Ecosoft schicken?! <RX>00 00 01 00 00 00 03 00 01 03 <RX>00 00 02 00 08 0A 0C 0E 10 12 14 16 18 1A 1C 1E Das Abfragen der werte beginnt offenbar ja erst danach: <TX>04 08 07 .. .. ......
die reale Außentemperatur in 1/10°C ausgegeben. Bei der gedämpften AT sind es hingegen ganze °C in 8 Bit. // Niffko
-
Thread
ISR Code schneller machen?
8 Bit Ringbuffer und einen 16 Bit Einmessbuffer oder nur einen größeren 16 Bit Ringbuffer den ich für alles verwende. Die µC RAM Auslastung ist mit kompletten Code laut Atmel Studio nicht größer 64% gewesen
als 16Bit gesteckt. Immerhin werden die von der Uart sogar als Sammlung einzelner Bits übertragen.
-
Thread
5 Tasten am ADC
Rick M. schrieb im Beitrag #2239337: > JTD-Bit: If this bit is one the JTAG interface is disabled. (write twice > within four cycles) muss in C So aussehehn MCUCSR=0x80; MCUCSR=0x80;//jtag off Es kann zur Laufzeit genau so eingestellt
weil ich in binär/hex denke jedes hexziffer steht für ein nibble aus 4 bit wnn man das erst mal im hirn hat weis man erst was dez für eine Krücke ist ich sehe f und wis alle 4 bit des nibble sind gesetzt sehe ich c weis ich die oberen beden nibble singesetzt sehe
-
Thread
C++ auf einem MC, wie geht das?
entsprechende > Code der Klasse ausgeführt. > Damit sollte exakt der gleiche Code entstehen, wie in plain C, also kein > Mehrverbrauch. das macht man auch so. Etwas Mehrverbrauch entsteht je nach Compiler. (schon alleine, da jedes Bit jeder LED einzeln initialisiert wird) In C++ würde ich das mit Templates
3Bits für CS0n [/c]
-
Thread
Mehrere DS1820/DS18B20 auslesen
0x01 ? warum ? ldi a0, last_device ; a0 = 0x00 ldi a2, 8 * 16 - 1 ; 8 bytes a 8 bit -> 1111111 7 mal 1 _wrs1: rcall w1_bit_rd ; READ I read bit c=0 sbc a1, a1 ; H = C rcall w1_bit_rd ; READ II read complement bit ld a1, z ; lade a1 aus
; Speichere bits im ROM an Z Position ror a1 ; C->b7------------------b0->C st z, a1 ; speicher a1 rol a1 ; C<-b7------------------b0<-C rcall w1_bit_wr
-
Thread
AVR-GCC Tutorial Taster entprellen
PD6 toggeln [/c] Aber warum machst Du die Initialisierung von DDRD in der if-Abfrage? Die gehört an den Anfang von main. Und der dickste Bock überhaupt ist, dass Du die Abfrage nur genau einmal durchführst und
->*pin,pin->port) einfach mehr sinn machen. Nö. Ein Port hat immer die Breite von einem Byte (8Bit) bzw. bei größeren CPUs auch 16 oder 32Bit. Ein Pin ist aber nur ein einzelner Pin (1Bit). Um nun aus dem Byte genau einen Pin auszuwählen braucht man eben die Pinnummer. (pin -> pin-number).
-
Thread
IF-Abfrage mit AND und Resultat?
Peter Bierbach schrieb im Beitrag #3865440: > Nein, es geht darum ein bestimmtes Bit im Byte auf gleichheit mit AND > abzufragen. Was ist das eigentliche Problem? Im ersten Post steht schon wieder so halbgarer C-Code. Woher kommen die beiden Bits, die da verglichen werden sollen? Wenn ich in einem Vektor gezielt ein Bit abfragen will, dann mache ich das über den Index: if a(3) = b(3) then...
-
Thread
Tastenverriegelung (Tastensperre)
weisen... > > BTW: warum sind die Taster an Analogeingängen angeschlossen? Hallo, den C-Code habe ich als Anhang hinzugefügt. Die Tasten sind in den Analogen angeschlossen, da die Tasten Kapazitiv arbeiten.. Hier nochmal die einzelnen Schritte für eine Kapazitiv arbeitende Taste 1
wählen (TRIS = 1) 4. ADCON wählen 5. Konvertierung starten (GODONE == 1) 6. ADCWERT ablesen (10Bits -> ADRESH und ADRESL) 7. Kondensator Clast am AN0 entladen (TRIS = 0) Also das ganze funktioniert soweit mit dem C-Code..Ich habe auch eine Funktion wo ich die ADC Werte 8x auslese und eine Mittelwert
-
Thread
LCD Uhr mit Alarmfunktion mit Drehencoder in BASCOM (Ein kleines Projekt für BASCOM Änfänger Vol3)
. Oft muss man aber ein einzelnes Bit verändern, ohne die anderen Bits zu verändern. Näheres zazu erfährst Du unter [[Bitmanipulation]]. MfG
8 Bit enthaelt, kannst Du nun 8 Bit einzeln da "hinein- tun" und aufbewahren. Um wieder dran zu kommen, musst Du nun eben die Stelle im Byte angeben, wo es sitzt. Merker.0 oder Merker.3.....Merker.7
-
Thread
DS1820, Ansteuerungsprobleme
Schlimmeres verhindert =) Ich habe gerade eine Denkblockade: Wie kann ich überprüfen ob ein bestimmtes Bit in einer Byte Variable gesetzt ist? So ist es anscheinend falsch: [c] var & (1<<i) [/c] Mfg
Sicher dass es ein DS18(S)20 ist, kein DS18B20? Damit wären es etwa 6°C - ok sicherlich auch nicht korrekt. Hast Du das mal auf dem Oszi/LA verifiziert? Kommen wirklich diese Bits an? Das hatte ich bei meinen 1-Wire-Slave auch gemacht um das Timing zu überprüfen.
-
Thread
* C++ == C++ *
type name 'uint33' > t.c:15:3: warning: overflow in implicit constant conversion [-Woverflow] dann taugt dein compiler (einstellung) nicht für ein 33 bit integer type
Ich kann damit leben das C vor der Abfrage = 0 ist, "A is A" raus kommt und am Ende in C 2 zu finden ist, das ergibt Sinn. Wer meint das anders sehen zu wollen kann das gerne machen. Das ein solcher Konstrukt in der Praxis
-
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
dregeber 35 schritte gesucht 360grad Gesperrt
gemacht werden. Diese lassen sich über 1:n Demultiplexer wie 74HC154 ansteuern - vorne kommt ein 6 Bit Binärcode rein, hinten wird genau ein Ausgang aktiviert. Das lässt sich dann mit einem uC ansteuern, der wiederum entweder von einem UART seine Befehle bekommt, oder von Tastern "vor" und "zurück" oder
Das IC ist nur Teil eines Encoders, hier nur die Absolut-Encoder mit 16 Bit https://www.mouser.de/c/electromechanical/encoders/?resolution=16%20bit&type=Absolute&sort=pricing Hier die application note zum Aufbau, ein rotierender Magnet auf einer Achse dicht über dem IC.
-
Thread
Attiny 2313 - mehrfache Abfrage Taster
habe ich 5 Taster zur Eingabe. Dabei ist die Betätigung von 1 oder mehr (max 5) Taster möglich. Einzeln kann ich sie ohne Problem abfragen und mir an 5 LEDs auch anzeigen lasse welcher Taster betätigt wurde. Wenn ich eine Übertragung mit einem Bus machen will, möchte ich wissen welcher Taster gedrückt
schrieb im Beitrag #6010224: > Also bei 5 Tasten ergeben sich 2^5 Möglichkeiten als 32. > Ist ne 5-bit -Binäzahl die du auswerten kannst. und am I2C 8574 sogar auf EINEM Port da muss man nicht mal Bits schieben. Die gedrückten Tasten liegen also alle in einem Byte, das ist doch easy. Aber auch
-
Thread
Beispielprogramm für RFM12 433MHz Funk-Module
einfach mal den Status senden 0x0000: Power ON nSEL = High eine Zeit lang warten nSEL = LOW uC => SDI : 0000 0000 0000 0000 (jedes Bit mit SCK low-high-low übertragen) und gleichzeitig SDO abfragen und die Bits einlesen. nSEL = HIGH Du muesstest beim ersten mal 0xA000 einlesen (damit wird
/Register benutzen kann. Für eine spezielle Anwendung würde ich gerne mit dem RFM12 Modul gerne einzelne Bits vertschicken können. Kann mann, wenn man das Bit 7 "el" im Configuration Control Command Register auf low lässt, einzelne Bits wie beim RF02 Modul versenden? d.h. wird die Bit Rate vom RFM12
-
Thread
LCD an T6963C und ATMega323
Hallo, void set_cmd_write(void) { PORTD = 0b11111110; //lower bits f.l.: C~D ~Ce ~Rd ~Wr asm volatile ("nop"::); asm volatile ("nop"::); PORTD = 0b11111010; //lower bits f.l.: C~D ~Ce ~Rd ~Wr } void set_data_write(void) { PORTD = 0b11110110; //lower bits f.l.: C~D ~Ce ~Rd ~Wr asm volatile ("nop"::); asm volatile ("nop"::); PORTD = 0b11110010; //lower bits f.l.: C~D ~Ce ~Rd ~Wr } Du setzt CE auf L, dann WR auf L und dann
-
Thread
Kann man ATtinys in Reihe miteinander kommunizieren lassen?
> ... wenn du ein paar Vielkanal-ADC (wie zB. AD7490) Ein AD7490 mit seinen 1MSPS dürfte zum Abfragen von ein paar Potis allerdings mehr als großzügig dimensioniert sein. Insbesondere kostenmäßig liegen Analogmultiplexern vor dem µC aber wohl deutlich eher im Budget des TO.
Ich habe einen besseren Vorschlag: Eine UART ist unnötig. Man kann die Betrachtung auf das einzelne Bit richten. Der Algorithmus könnte ungefähr folgendermaßen aussehen: 1. Erkennen, ob ein 0 oder 1 Bit empfangen wurde. 2. Falls Bit erkannt, Bit weiter senden 3. Wenn der Bitstrom endet,
-
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
Makro für: PORTD |= (1<<PD1)
Bimbo. schrieb im Beitrag #5703128: > Ich meine natürlich: > [c] > #define Servo1_aus (PORTD &= ~(1<<PD0)); > [/c] ja, bin grad dabei ein C-Buch zu lesen. ich verstehe jedoch nicht wirklich, warum ich das Bit negieren soll anstatt eine 0 hineinzuschreiben
>// C > uint8_t X = (PINB & (1<<PB2)) > 0; Aus andrem Thread >x = (PORTA & (1 << BIT)) == (1 << BIT) Wo ist denn der Unterschied, ob ich PINx oder PORTx schreibe ?
-
Thread
ATtiny25 - EEPROM - Write ohne Verschleiß
Platz ist, das ganze am besten mehrfach darin ablegen, um Redundanz zu haben falls doch einmal einzelne Bits kippen...
DB. Sieht auch echt nachvollziehbar aus, oder? [c] Gew. Zyklen Vorh. Zyklen Sich. Faktor 10.000.000 / 100.000 = 100 * 2 = 200 [/c] Jedes bit darf demnach erst nach 200 Zyklen gelöscht und neu beschrieben werden
-
Thread
Adressvergabe I²C
die Frage, ob ich mehrere Sensoren mit der gleichen Adresse auf dem Bus haben kann, die ich nicht abfrage (Adresse mit 0 am Ende), um dann die Adresse des Sensors zu ändern, den ich abfragen möchte (Adresspin auf High --> Adresse endet mit 1). @holger: Bitte von einem allgemeinen I²C-Bus ausgehen.
Frage, ob ich mehrere Sensoren mit der gleichen Adresse auf > dem Bus haben kann, die ich nicht abfrage (Adresse mit 0 am Ende), um > dann die Adresse des Sensors zu ändern, den ich abfragen möchte > (Adresspin auf High --> Adresse endet mit 1). Es gibt keine Enablesignale beim i2c. Daher wird
-
Thread
Code übersetzen - C --> BASCOM
Hallo alle, ich probiere gerade einen Code von C in BASCOM zu übersetzen. Der Code ist fürs Charlieplexing. Originalquelle hier: http://www.dgoersch.info/codesammlung/avr-gcc/50-charlieplexing Mein Problem ist nun die einzelne Steps. Wie übersetze
Du kannst jetzt jeden einzelnen Befehl nach Bascom übersetzen. Z.B. If lights.0 = 1 Then Tmp.1 = 1 entspricht deiner Abfrage. Allerdings wird das ziemlich ineffizient. Und Charlieplexing riecht per se zunächst mal zeitkritisch
-
Thread
LCD-Modul TC1602E-01 von Pollin ansteuern
ich einfach mal hier. Ich habe im Endeffekt das Gleiche Problem. Ich habe das besagte LCD über einzelne Testkabel an den Port C menes ATmega32 (16 MHz Quarz) wie folgt angeschlossen: Pin 1 (Vdd) -> +5V Pin 2 (Vss) -> GND Pin 3 (V0) -> Poti Pin 4 () -> PortC0 Pin 5 () -> PortC1 Pin 6 () -> PortC2
Hallo, mit dem Tiny4313 kann man I2C-Geräte ansteuern. Nur müßte man die Fehlerbehandlung in Software machen oder ganz darauf verzichten. Direkte Statusmeldungen kann man nicht abfragen wie bei den ATmegas. Ein DSO hilft bei der Fehlersuche
-
Thread
Kegelbahn Wurfergebnisse in PC übertragen
Möglichkeit die sogenannten Fallzahlschalter auszuwerten. Habe mir auch schon Gedanken gemacht wie die Bits sein könnten die übertragen werden müssen. Zum Beispiel so: Bit 1 und 2 für die Bahn entsprechen: 00=Bahn1 01=Bahn2 10=Bahn3 11=Bahn4 Bit 3 für die Lichtschrankenauswertung das eine Kugel gespielt wurde und als Zähler für die gespielten Kugeln Bit 4 für Fehlgasse/Holz ungültig dafür muss man bei unserer Anlage dann einen Taster am Steuerpult drücken.(Macht dann die Aufsicht) Bit 5 für Volle und Räumen Bit 6 7 8 bleiben frei Damit ist