-
Thread
Variable an Ausgang zuweisen
Hervorholen zu alt ist, aber: Kann man obigen Code von rufus auch einfacher/in einer Anweisung ohne if-Abfrage schreiben? Mir kommt es ein wenig umständlich vor, für eine einfache Pinänderung eine If-Abfrage einzuführen. Oder ist es für den µC sogar effizienter, wenn man den ganzen PORT in eine Variable
nowayback schrieb: > Kann man obigen Code von rufus auch einfacher/in einer Anweisung ohne > if-Abfrage schreiben? Wenn du die anderen Port Pins nicht verändern willst: nein > Oder ist es für den µC sogar effizienter, wenn man den ganzen PORT in > eine Variable schreibt, dort direkt den betreffenden
-
Thread
cpp memory leaks vermeiden
die den Speicher dann bekommen könnten. Du kannst nicht so einfach die aktuelle Speichernutzung abfragen, die zeichnet C/C++ nicht explizit auf, weil ineffizient. Dein Buffer liegt auf dem Stack, der wird natürlich von SBRK überhaupt nicht erfasst. Den Stack kann man zwar auch abfragen, aber muss
richtig sehe, werden wohl für jedes Object 36 Bytes Das kann man übrigens auch super mit sizeof() abfragen. Ich vermute dir fehlt es ein bisschen an Erfahrungsschatz und Wissen über C++ um wirklich einzuschätzen, was für eine Art der Speicherverwaltung du brauchst. Vielleicht erläuterst du mal *genau
-
Thread
Höhenmessung / Entfernungsmessung zu Erde
> Hätte nicht gedacht, dass die so teuer sind Für ein Instrument, dass bei -40°C bis +60°C auf Jahre exakt anzeigt, unempfindlich gegen hohe Beschleunigungen und Erschütterungen ist, kalibriert, verplombt, Luftfahrt zugelassen und Bauart geprüft ist, bei der es zu jeder Schraube
> Für ein Instrument, dass bei -40°C bis +60°C auf Jahre exakt anzeigt -55 bis +70°C > kalibriert, verplombt, Luftfahrt zugelassen und Bauart geprüft ist Höhenmesser werden im Rahmen der jährlichen Avionik-Nachprüfung in ihrem
-
Thread
Bitte um Hilfe bei der Programmierung von AVR8-Mikrocontrollern in C
Da kann doch nur die Arduino-IDE einen Bug haben oder ? C kann doch direkt ein 16-Bit-Register, wie es dass OCR3A ist beschreiben. Auch der Versuch OCR3AL & OCR3AH einzeln zu beschreiben funktioniert nicht. [c] #include <Arduino.h> #include <stdint.h>
Bernd S. schrieb im Beitrag #7514965: > C kann doch direkt ein 16-Bit-Register, wie es dass OCR3A ist > beschreiben. C ist C, und Arduino ist Arduino.
-
Thread
Wann wird dieser Ausdruck false ?
und 'bte' sollte 'btw' - by the way heissen;) ) Noch ein kleiner Tip falls du öfters im Code Bits in Flags testen willst, ich nehme gerne #define Makros dafür. in der art wie zB: [c]#define IS_ALL_BIT(f,bm) ((f&bm)==bm) #define IS_ONE_BIT(f,bm) ((f&bm)!=0) [/c] für zB: [c] if IS_ALL_BIT
!=0) { } [/c] Und ganz extrem wirds bei /Abfragen/ wie [c] if (EndschalterOben=0) { } [/c] Nach so einem Fehler sucht manch einer lang.... ;-) @ Norgan > zuerst mit !! normalisieren Sieh dir mal
-
Thread
Variablenzuweisung PIC18f2525
Hallo zusammen, ich möchte ein PIC18f2525 programieren, ich nutze den C18 Compiler von MPLap. Mein Problem ist nun folgendes und zwar möchte ich den einzelnen Bits der verschieden Ports Variablennamen zuweisen. Also das ich zum Beispiel sagen kann das Bit 1 des Port B heißt
Einzelne Bits kann man meines Wissens nicht abfragen, weil die interne Wortbreite nunmal 8 Bit ist, d.g. Vergleichsoperatoren funktionieren hardwaremäßig nunmal nur mit den ganzen 8 Bit (in dem Fall dem ganzen
-
Thread
AVR Interrupt Processing - was ist besser ?
... und wenn du es perfekt machen willst, dann packst du die Abfrage auf "iFlag" nicht in DoComputation(), sondern _vor_ den Aufruf von DoComputation in die While-Schleife. [c] while (1) { DoSomethingStupid (); if ( iFlag ) { iFlag=false; DoComputation
oder ein anderes ungenutztes Register im unteren Registerbereich, was man dafür nehmen und 8 Flag-Bits unterbringen kann. Hat zusätzlich den Vorteil dass man diese Flags mit nur einem Maschinenbefehl setzen/löschen/auswerten kann. In der Endlosschleife in main() steht dann nur sowas in der Art: [c]
-
Thread
PIC-IR-Empfänger HILFE!
erhöhre Counter1 um 1 btfsc PORTA,0 ;wird das bit gecleart? goto Counter11 ;nicht gecleart springe zu Counter11 goto Abfrage ;gecleart springe zu Abfrage Abfrage movlw Counter1 ;Schreibe Zahl Counter1 in das Work Register
goto Counter11 Counter11 INCF Counter1,1 btfsc PORTA,0 goto Counter11 goto Abfrage Abfrage BCF STATUS,C incf Counter2,1 movf Counter1,0 SUBWF Zahl1,0 BTFSC STATUS, C goto Low1 goto High1 High1 bsf Code1,7 rrf Code1 goto IREmpfang Low1
-
Thread
Probleme bei Programmierung von Lichtschranken-Stoppuhr
schon einen Ansatz mit einer Variablen Flag gemacht. Geh doch einen Schrit weiter und nehme die einzelnen Bits. Ich nenne solche programmsteuernden Variablen Prg_Ctrl. [avrasm] Prg_Ctrl: .Byte 1 ; Bit 0 Zeitzähler Freigabe starten ; Bit 1 Zeitzähler läuft
;* Bit 4 = c * ;* Bit 5 = d * ;* Bit 6 = e * ;* Bit 7 = f * ;*
-
Thread
Serielles Bussystem
I2C ?
einfach und leicht zu implementieren. Allerdings würde ich dann nicht per Broadcast die Slaves abfragen, sondern der Master sollte jeden Slave geziehlt abfragen und die Anderen halten dabei die Klappe, somit umgehst du schon mal Kollisionen. Christian
-
Thread
grundlegende I2C-Probleme
Hi, ich zimmere mir gerade eine I²C-Schnittstelle zusammen und habe /etwas/ den Überblick verloren - war hier wohl etwas zu heiß [1]. Problem eins: mit den folgende Befehlen kann ich einzelne Ports schalten: #define setbit(x,y) ((x) |= (y)) // setbit(P2DIR,BIT0) schaltet auf Ausg // setbit(P2OUT,BIT0) setzt Pin auf Hi #define clrbit(x,y) ((x) &= ~(y)) // clrbit(P2OUT,BIT0) setzt Pin auf LOW #define invbit(x,y)
-
Thread
Leistungsfähigere(Größere) ATMega
Ausdrücke nicht auswerten. Immer nur eine Operation pro Quelltextzeile. Also statt x = a + b + c x = a + b x = x + c Matthias
Hi C++ hat mit C etwa soviel zu tun wie Java mit C. Es ist eine andere Sprache. Man kann zwar mit einem C++ fast jeden C Quellcode übersetzen aber dann ist das immer noch C und nicht C++. @BomberD Ich
-
Thread
CAN-Error zählen
wozu ich eigentlich die anzahl der Fehler haben möchte. Ist es überhaupt möglich, die anzahl der einzelnen Fehler (Acknowledge-Fehler, Form-Fehler und Bit-Fehler) zu ermitteln? Laut datenblatt The CAN module will detect the following transmission errors: • Acknowledge Error • Form Error • Bit Error
einmal einen Fehler haben, der den error counter um 8 erhöht. Auch unter sich (Acknowledge-, Form-, Bit-Fehler lassen sich nciht unterscheiden) Hinterher wollte ich eigentlich, dass bei eingehender NAchricht die Anzahl der einzelnen Fehler raussende.
-
Thread
WordClock mit WS2812
dachte ich bei Deiner Frage: > Reichen hier auch die 24C01 (1k) ? dass Du mit 1k ein ganzes Kilobyte meintest. Ich habe mir daher mal ein Datenblatt geschnappt und nachgeschaut: Die 24C01 haben nur 1kBit und damit sind das gerade mal 128 Bytes. Das reicht
adc_value; } //*brightness_p = (adc_value >> 8) & 0x0F; // adc_value has 12 bits, but we need only 4 bits (16 values) for brightness *brightness_p = (15*adc_value/max_adc_value) & 0x0F; } return rtc; } [/c] mfg Ralf
-
Thread
C Code Modellbau
kann wohl schon eine LED per Timerüberlauf ein und aus schalten. Oder auch, durch setzen eines DDR Bits, eine LED dauernd zum leuchten bringen. Mir geht es halt nur um ein paar Tips, wie und womit ich die Signale einlesen und auswerten kann. Außerdem suchte ich ein C Code beispiel für den Mega8
Oh, sorry. Hätte ich vielleicht noch mit dazu schreiben sollen. Die Fernsteuerung setzt die einzelnen Steuersignale zu dem sog. PPM-Signal zusammen und sendet es. Manche Empfänger geben dieses Signal dann wieder nach aussen weiter. Bei meinem Graupner C19 liegt es am unbenutzten 3. Pin des Batterieanschlusses
-
Thread
Retro Fieber: Z80 oder 68000 ?
Freundin ein paar Artikel zu dem Thema rausgesucht, vielleicht helfen sie ja (Heft/Seite/Titel): % c't 84/ 7 82 EPAC-80 (Prozessor Z80) % c't 84/ 8 93 Testprogramm für EPAC-80 (Prozessor Z80) % c't 85/ 3 47 Mehr als nur ein 16-bit-EPAC-95 (Prozessor TMS9995) % c't 85/ 3 52 EPAC-95 (Prozessor
Murks" bezog sich nicht auf Script vs. Makefile. Du könntest ja auch im Script den Compiler für jede C-Datei einzeln aufrufen. Mit Murks meinte ich das hier: [c] // Einbindung von weiteren Modulen. #include "driver.c" void main() { .... } #include "interrupts.c" // An das Ende des
-
Thread
Sprung nach Interrupt
hatte ich auch schon. Aber ich kann doch nicht an jeder Stelle im Programm ständig diese Variable abfragen!? Ganz wichtig ist das er nach der Interrupt-Funktion auf keinen Fall an der Stelle weitermachen darf an der er unterbrochen wurde! Wie soll ich schaffen das immer nach dem Interrupt direkt die Variablen-Abfrage
dann startet das Programm neu, darin erstmal alle Aktoren in einen sicheren Zustand steuern. Dann abfragen, ob es ein power-on oder ein watchdog-reset war, dementsprechend dann den Bestätigungstaster abfragen (oder bei power-on-reset eben nicht). Falls der watchdog sonst im Programm genutzt wird und die
-
Thread
Wo genau unterbricht ein Interrupt das laufende Programm?
auftreten. Ein Interrupt kann auch innerhalb einer Zuweisung auftreten. Maßstab sind hier die einzelnen Maschinenbefehle. Eine C-Anweisung wird i.d.R. in eine Mehrzahl davon zerlegt und solange Interrupts eingeschaltet sind kann ein Interrupt zwischen jedem dieser Befehle angesprungen werden.
ergibt. In etwa so - vergleiche a mit b - wenn a größer als b, gehe zu anweisung xxx - vergeliche c mit d - ... Diese einzelnen Anweisungen sind dann quasi elementar und nicht unterbrechbar. Es wird dann zwischen den Zeilen unterbrochen.
-
Thread
Sensirion SHT11 Code
Der Kommentar bezieht sich auf diese 3 Zeilen zusammen: [c] clrBits(PORT(SHT11_PORT), SHT11_SCL | SHT11_SDA); // SCK output low, SDA input/high setBits(DDR(SHT11_PORT), SHT11_SCL); clrBits(DDR(SHT11_PORT), SHT11_SDA); [/c] Für das "high"
Gerätenummer" jeweils vom Bus ab. 1-Wire Sensoren können dagegen über eine pro Sensor eindeutige 64-Bit Nummer addressiert werden, davon kannst Du viele gleichzeitig an einen Arduino dranhängen und sie trotzdem einzeln adressieren und abfragen: http://www.arduino.cc/playground/Learning/OneWire
-
Thread
Mehrere vorhandene Funktionen für bis zu 4 UART's nutzen?
- 1); SET_BIT(uartbuf->uart->UCSR0B, UDRIE0); } [/c] Oft hat sich der Hersteller dafür schon was überlegt, denn er muss ja Beispielcode liefern.
pin; SET_BIT(UCSR0B, UDRIE0); } [/c] Um nun eine Zeichenkette einzuspielen nutze ich... [c] void uart_char(UART_P uart, char chrtx) { uart->put_char(chrtx); } void uart_str(UART_P uart, char *buftx
-
Thread
PIC18F2550 hängt sich nach längerer Dauer auf
Programmbeispielen, es gibt eine Codesammlung und unendlich viel Material was die Behandlung von Tastern an einem uC betrifft. Stichwort: Tastenentprellung Deine Schaltung am Interrupteingang mag ich wirklich nicht extra kommentieren, das musst du schon verstehen. Die Gründe, warum ein einzelner Widerstand problematischer
befindet und jeden Big-While-Durchlauf neu dorthin zu hüpfen. Und dann nur am ende einmal die Taster abfragen. Ich hoffe es ist klar was mit der Frage gemeint ist!! Und dann noch was. Hat mich eigentlich nicht wirklich gekümmert, aber auch wenns wer weiß: Beim sprintf Befehl der C18 Lib schreibt er mir
-
Thread
STM32F07VG Discovery - EXTI15_10_IRQHandler mit mehreren Interrupts
ich würde die [c]&& (EXTI_GetFlagStatus(EXTI_Line12) != RESET)[/c] weglassen. Vor [c]EXTI_ClearITPendingBit(EXTI_Line12);[/c] kannste die Pins abfragen
= GPIO_PuPd_UP; [/c] Default High, er will also anscheinend bei fallender Flanke in den Int... [c] if (GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12) == Bit_SET){ if ((EXTI_GetITStatus(EXTI_Line12) != RESET)){
-
Thread
MSP430 ADS7888 RS232
1000 Samples pro sekunde [/c] Was hast Du denn für'n Super-MSP erwischt ;-) Mein Timer_A hat nur 16-bit, also maximal 65535
do { IFG2 &=~ URXIFG1; }while (URXIFG1 & IFG2); [/c] Zuerst lösche ich URXIFG1 und frage gleich danach ab, ob's wieder gesetzt wurde. Wenn der Code schneller durchläuft, als die SPI-Datenübertragung braucht, dann bin ich in der while-Abfrage, bevor die
-
Thread
Projekt Fußtreter
Aufgabe: Abfrage, taster 2s gedrückt? wie baue ich eine solche If anweisung? ich mein if ( bit_is_clear ( pinc,2 )) is klar. oder bit_is_set.... aber wie frage ich "dauert der tastendruck n-sekunden ?
[c] if ((bit_is_clear ( PIND,3)) && ( j <= 4)) { j = 1; buildPort ^= (1<<0); } else j = 5; buildPort ^= (1<<4); } warten_ms(200); [/c] Sascha
-
Thread
Interrupt Fehlerquellen - FIFO Buffer
main-Variabeln und ISR-Variabeln das Problem lösen? Eine weitere Frage wäre, wie ist es bei if abfragen? Wenn ich das mache: 58: [c] if(wait_time == 0 && Buffer[index_read].sensor_answer == 0) [/c] wait_time ist eine uint16_t und Buffer[].sensor_answer ist 1 Bit gross! Wenn jetzt während dieser
][/c] der Compiler wissen, dass du den Index nur als vorzeichenlosen 8-Bit-Ausdruck berechnet haben willst. Bei [c]tmpindex_read--; ... Buffer[tmpindex_read][/c] wäre der Fall klar, da kann nichts
-
Thread
SSD gebraucht kaufen - keine gute Idee ?
CrystalDiskInfo-Portable_47445414.html Es gibt SLC, MLC und TLC Speicher. SLC (speichert 1 bit pro Speicherzelle) schafft 100.000 Lese/Schreibzyklen MLC (speichert 2 bit pro Speicherzelle) schafft 10.000 Lese/Schreibzyklen TLC (speichert 3 bit pro Speicherzelle) schafft 1.000 Lese/Schreibzyklen Um zwei Bit in einer Speicherzelle speichern zu können muss man die Speicherzelle nicht einfach nur umschalten, sondern man macht den MosFET etwas mehr oder weniger leitend. Um 3 Bit speichern zu können braucht
-
Thread
Kryptographie
for(x=0; x<=strlen(array); x++) > > Das muss bestimmt 'x < strlen(array)' sein. Und damit diese Abfrage auch > funktioniert soll 'array' nach dem Einlesen auch mit einem \0 > abgeschlossen werden. Der Aufruf von strlen ist so oder so unnötig: [c]x = 0; while(array[x] != '\0'){ /* ... */
0] ); return 1; } char* password = argv[1]; n = strlen( argv[1] ); while( ( c = getchar() ) != EOF ){ if( (unsigned char)c >= ' ' ){ c = c ^ ( password[i] & 0x0F ); if( ++i >= n ) i = 0; } if( c == '\n' ) i = 0; putchar( c );
-
Thread
I2C Display zeigt komische Zeichen
Er hat [c]Serial.println(voltage);[/c] zu [c]Serial.print(voltage);[/c] geändert. Den Tipp mit den Binärdaten hat er nicht verstanden. Ein LCD kann in den 4Bit Modus - in der Regel! - nur einmalig initialisiert
Lösung hast, dann freue ich mich diese zu > erlernen. Der übliche Weg ist, zuerst drei einzelne Command-Nibble mit dem Umschaltbefehl auf den 8bit-Modus zu senden. Danach ist das Display im 8bit-Modus, egal in welchem Zustand es vorher war. Dann sendet man den Befehl zum Umschalten auf 4bit,
-
Thread
Hallo Welt macht nicht was es soll
dafür sind PINC. Sonst liest du den internen Zustand der Pull-Up Widerstände Du musst also machen: [c] int main(void) { DDRC |= (1 << 5); while (1) { _delay_ms(500); PORTC = PINC ^ (1 << 5); } } [/c]
Aufruf in eine Schleife oder du machst einfach ein paar _delay_ms() hintereinander, wobei jeder einzelne nicht länger als 20 ms dauern darf. PS: Das mit PIN und PORT so wie MasterFX das gemeldet hat, ist natürlich Unsinn. Du willst ja den momentanen Zustand des AUsgangsports lesen um dort ein Bit
-
Thread
Suche Helfende Hand bei vb Überwachungsprogramm,
Daten über eine RS232-Schnittstelle senden und/oder empfangen möchtest, sondern nur den Zustand einzelner Signalleitungen setzen und abfragen möchtest. Das ist nicht die Schnittstellen-Nutzung, für die es oft fertige Programmbeispiele oder Libraries gibt; für deine Nutzung wirst du eher den direkten
Daten über eine RS232-Schnittstelle senden und/oder empfangen möchtest, > sondern nur den Zustand einzelner Signalleitungen setzen und abfragen > möchtest. 100% getroffen genau das will / möchte ich erreichen. Und die 4 Ports sind bereits onborad also kost mich nix :-)
-
Thread
Sprung aus Funktion zu Funktion ?
Nullen stimmt, universell eindeutig ist es aber nicht. > > 1 << 15 ergibt ohne Beschränkung der Bits 32768. Dieser Wert ist in > einem 16-Bit Typ nicht mit Vorzeichen darstellbar. Du wuerfelst hier {1.2}-Komplement und Left-shift einfach durcheinander. Mit 32bit Integern: [c] $ cat shift.c
Und wie ist es mit der Aussage: [c] a << #bits == a * 2^(#bits) [/c] Ein Zweierkomplement-System: 1<<15 = 1*(2^15) (mit negativem Vorzeichen) =-32768 (dezimal) Und auf einem Einerkomplement-System: 1<<15 = 1000 0000
-
Thread
[C++] Paralleler Zugriff auf Variable und einige Fragen zu C++ <=> Homepage
Zeitpunkt die > selbe Variable beschreiben möchte? Wenn eine skalare "volatile" Variable maximal 32 Bits gross ist und nicht mit Gewalt misaligned wurde, dann sind einzelne lesende und schreibende Zugriffe des ARM im RasPI atomar. In dem Fall ist es möglich, die Variable ohne Mutex zu lesen. Voraussetzung
völlig unsynchronisiert. Dies würde ich auch gerne so > beibehalten. Wie lange dauert eine Abfrage aller Sensoren? Wenn die Antwort "weniger als 500 Millisekunden" ist, dann kannst Du Dir den ganzen Zinnober mit Multithreading, Synchronisierung etc. sparen. Und warum C++? Machst Du irgendwelche
-
Thread
Anfängerfrage zu Timern und Interrupts in AVR Studio unter c
Welchen Teil des Abschnitts verstehst du nicht? [pre] Verändern von Registerinhalten Einzelne Bits setzt und löscht man "Standard-C-konform" mittels logischer (Bit-) Operationen. [/pre] [C] x |= (1 << Bitnummer); // Hiermit wird ein Bit in x gesetzt x &= ~(1 << Bitnummer); // Hiermit wird ein Bit in x geloescht [/C] [pre] Es wird jeweils nur der Zustand des angegebenen Bits geändert, der vorherige Zustand der anderen Bits bleibt erhalten. Beispiel: [/pre] [C] #include <avr/io.h>
-
Thread
Pac Man mit dem ATmega8
http://www.reichelt.de/inhalt.html?SID=14QAl30dS4AQ4AAFGRm%40c7f25b93de0eff217c8d737c3d702701c;ACTION=3;LASTACTION=2;SORT=preis;GRUPPE=A34;WG=0;SUCHE=Ram;ARTIKEL=628128-70;START=0;END=16;STATIC=0;FC=669;PROVID=0;TITEL=0 Wie groß ist dieser Baustein? Ist der 1MB
funktionieren. Im Flash geht man tatsächlich großzügig mit dem Platz um: in einem Byte werden nur fünf Bits benutzt. Da ist dann entscheidend, wie viel Code man insgesamt unterbringen muß. Noch eine andere Idee: kann man über eine synchrone serielle etwas mit halbem µC-Takt rausschieben lassen? Dann
-
Thread
Mehrere Sensoren über eine UART Leitung kommunizieren lassen
keine neue Platine entwerfen kann. Die weitere Option wäre in meinen Augen halt noch, einen weiteren µC zu verwenden der 6 verschiedene UART hat und dann die Daten sammelt und dann einzeln weitergibt. Ist das vielleicht besser? Mir ist klar, dass es Intelligentere Lösungen gibt (Bussysteme wie SPI und
nicht > schlecht. Ist aber vielleicht etwas umständlich wenn ich nur einen > bestimmten Sensor abfragen will. Für deinen PC ändert sich nichts. Der schickt weiter seine Abfragen raus. Jeder Sensorrechner empfängt auf der einen UART die Abfrage, sieht nach ob sie für ihn ist und wenn nicht, schickt
-
Thread
Probleme UART, Baudrate Atmege8
Multimeter nachmessen und dann entscheiden, ob der µC läuft oder nicht. Wenn du sinnvolle Wartezeiten wählst, kannst du mit der LED und einer Stoppuhr nachmessen, ob der µC richtig bzw. wie erwartet tickt.
autobaud Funktion. Da sendet der PC z.B. viele ASCII 'U' in Binär 01010101. Man misst dann die länge einzelner Bits im verhältnis zum eigenen Zeitnormal (der RC Oscillator) und stellt den Baudratendivisor etsprechend. Damit hat man auf den Quarz im PC Kalibriert. man Könnte jedoch auch den internen RC-Oscillator
-
Thread
MSP430F1612_2 Timer_2 Zeitbasen
unbedingt von CCR1 auf CCR0 wechseln? Probier doch erst mal, den Code für die ISR rein von ASM in C zu portieren. Das TAIV musst du abfragen, macht der Compiler nicht. Wenn da geht, sehen wir weiter. Nicht immer 2 Schritte auf einmal versuchen ;)
// Module enable U0CTL &= ~SWRST; // SPI enable [/c] Und hier die init für die SD-Card (der Code kommt von TI) [c] UCTL1 = SWRST; // 8-bit SPI Master **SWRST** UTCTL1 = CKPH | SSEL1 | SSEL0 | STC; // SMCLK, 3-pin
-
Thread
PCF8574 muss mehrfach ausgelesen werden
{ I2CMasterBuffer[i] = 0; I2CWriteLength = 1; // 1 Byte I2C schreiben Transfer I2CReadLength = 4; // 4 Byte lesen I2CMasterBuffer[0] = PCF8574A_ADDR | 0x0E | RD_BIT; // 1. Byte = PCF8574A + Adresse (lesen)
dieses "I2CEngine();"? I2CEngine() stammt aus einer Code-Sammlung von NXP. Die Kommunikation des I2C wir nur durch Interrupthandler übernommen. Ich habe ein Delay zwischen den einzelnen Abfragen eingebaut, was aber nichts gebracht hat... aber schon mal vielen Dank für die ganzen Antworten :)
-
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
Flanken-gesteuerte Abtastung
/c] Es lebe Copy-Paste, und alle Fehler, die es mit sich bringt... Was da steht heißt nur, dass egal welcher Pegel am PIND ist, auf jeden Fall das Bit 1 in /zustand/ gesetzt werden soll. Diese ganze Litanei ließe sich ohne signifikante Funktionseinschränkungen so abkürzen: [c] zustand|=(1<<PIND1); [/c] Ich verstehe deine Logik nicht: [c] while(bitmuster==PIND) timer_start(); : : while(bitmuster==PIND) counter[i]++; [/c] Mal wartest du solange keine Änderung
-
Thread
PIC18F44k22 (Xtreme low power) stürtzt ab.
>>>RCON Register abfragen Was ist das denn für ein Register ? Freie Pins habe ich nicht mehr, aber SPI ist zum Hauptprozesor angeschlossen. >>>MCLR gegen GND? Sicher? Ja. die MCLR Funktion ist in den Config Bits deaktiviert
ganze nochmal testen. [EDIT] Aber ein Einbrechen der Versorgungsspannung, was einen Reset des uC auslöst, solltets du mit einem Oszi schon messen können. Dann weißt du doch mehr. Wie sensibel ist denn dein BrownOutReset (FuseBit BOR) gesetzt? Gruß
-
Thread
Software UART
Hallo, kann mir bitte jemand die Zeile [c] TIMSK = 1<<TICIE1^1<<OCIE1A; [/c]aus suart.c erklären? Verallgemeinert kann die Zeile auch so aussehen [c] REGISTER = 1<<BIT5^1<<BIT4 [/c]Das '^' ist doch eine Bitweise EXOR Verknüpfung. Werden
bit[/c] Ich hoffe, das hilft irgendjemandem. Viele Grüße Thoralt
-
Thread
Sinuserzeugung in VHDL
((bit_lenght - 1) downto 0); variable mult_value : SIGNED(((bit_lenght * 2) - 1) downto 0); begin if (a.ip = 1 and c.ip = 1) then result_3.ip := 1; result_3.fp := bit_lenght
:= STD_LOGIC_VECTOR(SHIFT_LEFT(UNSIGNED(ergebnis), 1)); result_3.value := SIGNED(ergebnis((bit_lenght - 1) downto 0)); elsif (a.ip = c.ip) then result_3.ip := (a.ip + c.ip) - 1; result_3.fp := bit_lenght - (result_3.ip); result_3.nb := bit_lenght; mult_value
-
Thread
MSP430 parallele Impulszählung mehrere Ports
also alle 8 Leitungen abgerufen. Wenn also an Port 1 ein Impuls eintrifft, wird er aufgerufen. Die einzelnen Pins müßte ich dann in der Interruptroutine abfragen. Dann zähle ich aber mitunter Signale doppelt, da ich nicht weiß welcher Port den Interrupt ausgelöst hat. Hat jemand eine Lösung?
> 8 Leitungen abgerufen. Wenn also an Port 1 ein Impuls eintrifft, wird er > aufgerufen. Die einzelnen Pins müßte ich dann in der Interruptroutine > abfragen. Dann zähle ich aber mitunter Signale doppelt, da ich nicht > weiß welcher Port den Interrupt ausgelöst hat. > Hat jemand eine Lösung?
-
Thread
1Wire: Mehrere ID's über DS2480B
Hallo Kollegen, es ist klar, wie das Search über einzelnen Bits funktioniert. Dieses Algorithmus kann ohne kontroller-DS2480B programmiert werden. Man kann theoretisch mit einem Pin des µC's die ganze Ermittlung durchführen. Bei mir auf dem UART-Bus sitzt
die ROM-Nummer des Dev's entziffern kann. Das ist doch nicht das bitweise Algorithmus, in dem ich einzelnen Bits direct und complement und discrepancy bearbeiten muss. Habe verschiedene Varianten ausprobiert, kriege keinen responce. Also es bleibt mir nichts anderes übrig als bitwese Algorithmus verwenden
-
Thread
ATMega 64, ALL AVR, Anfänger Problem
[c] void PWM_T1(void) { TCCR1A = (1 << WGM10)|(1 << COM1A1)|(1 << COM1A0); // Bit WGM10 des Registers TCCR1A High setzen TCCR1B = (1 << CS11) | (1 << CS10); // Bit CS11 und
Ok wenn es nicht stört zurück zum Problem. Ich verstehe nicht welche Adressen die einzelnen Portbits haben. Im Datenblatt steht PROTC 0x35 aber für DDRC 0x34. Moemntan scheitert es daran das ich die PortBITS nicht einzeln setzen kann [c] PORTC0 = V1_1; PORTC1 = V1_2; PORTC2 = V2
-
Thread
Hilfe für Code - VHDL
50 Cent Stück, wenn das LSB Bit 0 gesetzt ist, und 1 Euro, wenn das Bit(1) des "Geldzählers" gesetzt ist. Alles in Allem: nette kleine Aufgabe, bei der man schon lange /vor/ dem Schreiben der ersten VHDL-Codezeile viel falsch machen
das ist recht einfach. Allerdings muss man hier z.B. die eigentlich unnötige Überzahlung von z.B. 50C-50C-1E oder 50C-2E oder sogar 50C-50C-2E auch berücksichtigen (siehe Screenshot). Trotzdem kommt man übersichtlich mit 7 Zuständen aus, wobei die Ausgabe mit 4 Zuständen "A..." eigentlich unnötig ausufernd
-
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
Bits auslesen
gibt es für die Inline Variante zum schreiben in ein Register auch die passende Gegenseite, wo ich einzelne Bits abfragen kann? https://www.mikrocontroller.net/articles/Bitmanipulation#Hilfsfunktionen_als_Inline-Methoden
){ return (*target & (1<<bit))!=0; }; [/c]
-
Thread
Verständnisproblem Portexpander Code
/ Abfragen ob Bit 7 == "1" { SET (PORT_SER); //SER Port auf 1 } data <<= 1; //Bits nach links schieben
/ Abfragen ob Bit 7 == "1" { SET (PORT_SER); //SER Port auf 1 } data <<= 1; //Bits nach links schieben