-
Thread
STM32F4: BMA020 per SPI
erstes 0x8600 geschrieben: Es wird also ins Register 0x06 nur 0x00 geschrieben, die 8 ist das Write-Bit. Wenn der SPI auf 8 Bit eingestellt ist, könnte man alternativ auch schreiben: [c] CS_Low; // Schreibbefehl an Register 0x06 SPI_Write(SPI1, 0x86); // Schreibe 0x00 in Register 0x06 SPI_Write
allererstes habe ich ein Flag definiert. Dieses markiert, ob die Startsettings geladen wurden. [c] #define BMA020_SET_SUCCESS 1 #define BMA020_SET_FAIL 0 [/c] Danach habe ich eine if-Abfrage geschrieben, welcher dieses Flag abfragt. [c] void bma020_READ_DATA(void) { if (bma020_setting_flag
-
Thread
DCF77-Modul von Pollin
Ja, ein R, ein C und ein Schmitt-Trigger oder zwei Rs und ein C und ein Transistor. Letzteres habe ich nicht getestet.
Meter von allen Stromleitungen angebracht -- alles ohne Erfolg. Mal kommen wilde Zacken anstelle der Bit-Signale, mal fallen Bits aus. Alle DCF77-Uhren im Haus funktionieren ohne Probleme. Momentan denke ich daran, das Modul abzuschreiben und es mit dem Modul von C** zu versuchen. Hat jemand Ideen
-
Thread
20 PINs umschalten ?
gleichzeitig 1:1 Umschalten können. > > Und das gerne mit 4 Platinen. > > Genau geht es darum eine C64 Tastatur an 4 C64 anzuschliessen. Also die Steuerplatine (Tastatur) immer auf einen einzelnen C64, drei C64 bleiben jeweils unbeschaltet - richtig? Wenn Mechanisch reicht besorg dir bei Ebay
einem NMI auslöst. Das kannst Du mit > Arduinos umsetzen, aber die Tastatur mit einem AVR/Arduino abfragen und > den C64 eine andere Tastaturschnittstelle beibringen vereinfacht die > Umschaltung unheimlich. Klingt schon mal gut. Wie kann ich das verstehen 'dem C64 eine andere Tastaturschnittstelle
-
Thread
[S] Eprom UV Eraser
Löschgerät. Der UV-B Scheinwerfer zum Nachhärten der 3D-Drucke reicht definitiv nicht. Auch wenn es einzelne EPROMs gibt, die nach Stunden ein paar Bits verlieren. Daher habe ich etwas selber gebaut. Kleine UV-C Röhren gibt es im Aquarien- und Teichbedarf. Allerdings bekommt man den Ballast für die kleinen
faktisch nicht. Sonne ist deshalb zu vermeiden (und daher die Fenster abzukleben) weil bereits einzelne gekippte Bits ausreichen können damit ein Programm im EProm nicht mehr funktioniert. Und die Zeitspanne bis ein erstes Bit Kippt ist eine GANZ andere Geschichte als bis ein Eprom leer ist. Besonders
-
Thread
Zählen von Impulsen ohne T0
Zähler alle paar µs inkrementiert. Der Zählerstand sollte möglichst nicht "überlaufen". Also sollten 64 Bit Breite ausreichen. Das Inkrementieren einer einzelnen Zahl braucht nur wenige Taktzyklen. Bei jeder Ansteigenden Flanke holst Du Dir den aktuellen Zählerstand und ziehst den Vorgänger ab. Je nach
Bit Zähler macht jetzt schon nach weniger als einem halben Tag schlapp.
-
Thread
Positionserkennung Rollladen
Eventuell könnte man auch die einzelnen Lamellen der Rolladen mitzählen. Funkt. vllt. mittels einer Lichtschranke oder mit einem Positionsschalter mit Rolle.
Logitech-M-S69-klassik-Kugel-Maus-3-Tasten-Wheel-Mouse-PS-2-Stecker-PC-Laptop-/141052765446?pt=DE_Computing_M%C3%A4use_Trackballs_Touchpads&hash=item20d7666506 Die alten Kugelmäuse hatten doch 2 davon (X/Y)
-
Thread
Von Arduino zu C(++)
Dein Post verwirrt etwas. "richtiges" C++ ist eben objektorientiert im Gegensatz zu C. Das hat aber nichts mit Arduino zu tun. Die Sprache verwendet Arduino genau so wie Visual Studio, Eclipse und co?! du musst unterscheiden ! C ist nicht
#3727082: > Wenn du vorher Arduino gemacht hast, dann hast du aber schon alle > Syntaxelemente von C verwendet (oder solltest es zumindest)... Das aufjedenfall. Ich persönlich hatte garnicht die großen Probleme mit C aber das man aufeinmal nur mit einzelnen bits arbeitet, von Pins umdenken muss
-
Thread
switch-case Anweisung wird nur im WINAVR-Simulator ausgeführt Nicht auf Hardware ATMega8 (STK500)
dir die restlichen Pins auf 0 ziehen, dann wirst du hier nicht 1, 2 oder 4 erhalten. Wenn du einzelne Pins abfragen willst, dann ist die beste Strategie das Eingelesene für jede Abfrage einzeln so zu maskieren, dass nur das interessierende Bit übrig bleibt. [C] x = PINB; if( x & 0x01
0b11110110; else if( x & 0x04 ) PORTD = 0b10101010; else PORTD = 0b01010101; [/C] Du kannst natürlich auch einen switch-case benutzen. Nur solltest du dann aber sicherheitshalber von x auch wirklich nur die Bits zum Vergleich benutzen, für die du case-Fälle hast bzw. diejenigen
-
Thread
Arduino - Speicheroptimierung?
der Haufen machen soll! Die Ehternet Schnittstelle ist nur für die Webseite/Weboberfläche. Die einzelnen Knoten haben je eine einstellbare CAN-ID und warten auf Befehle (PWM oder Relays-Ausgang) und senden bei Bedarf 8 Analog-Werte, wobei der erste Wert immer die Betriebsspannung (28V) in 8Bit und der
Mit den Variablen Outputs und Inputs (je long) hätte man eigentlich ja alles abgedeckt, eben 32Bits pro. Dann bräuchte man die Input[8] nicht mehr, wären nochmal 9x8 Bytes... Was zwar kein Speicherplatz jedoch weniger traffic bringt, wäre ne Abfrage, ob sich was geändert hat, Out oder Inputs
-
Thread
AtMega16 - HILFE
zwischen 0 und 255 (=2^8 Werte) geben lassen. Die einzelnen Bits dieses Werts gibst du dann nacheinander d.h. in einer Schleife als einzelne leuchtende/dunkle LED aus. Entsprechend verfährst du mit dem Einlesen der Tastenwerte. Anschliessend vergleichst du den 8-Bit LED-Zufallswert mit dem 8-Bit Eingabewert. Keine Schleife notwendig dafür.
-
Thread
c++ Rechnen bis Ganzzahl ausgegeben wird
im Voraus > Razeradio^^ Hallo, unter der Annahme, dass die eigentliche Formel 82*(a^8-a^4)/(b*c*d) heisst, ist ein Ergebnis a=2, b=12, c=20 und d=41. Die Abfrage nach einem ganzzahligen Ergebnis kann man auch damit erreichen, indem man den Teil vor dem Bruchstrich rechnet (X als ganze Zahl)
Beitrag #4268309: > https://gmplib.org/ Es gibt etwa 3 Milliarden Lösungen (Permutationen von b, c und d nicht mitgezählt), an die man mit gewöhnlicher 64-Bit-Arithmetik herankommt.
-
Thread
Effizente Mittelwertberechnung über 24bit (3x8Byte) ADC daten
4 Samples. Derzeit (noch ohne mittelwert) hole ich mir die 24bit SPI daten aus dem uint8_t buffer noch einzeln und schiebe sie zusammen in eins der 32bit register des µC. Natürlich ist mittelwert berechnen da einfach, nur: Wenn die daten über Bluetooth rausgehen
naiver Ansatz: a+b=c [ergebnis 32bit] c = c>>1 [Mittelwert von 2 Werten: 2^1 ] wie soll es denn schneller gehen? Und Bitverschiebeaktionen gehen ganz ohne Division.
-
Thread
Suche: Steuerungsplatine mit Microcontroller USB
programmieren. Du musst ihn nur in den passenden IO-Modus schalten ("Bitbang") und kannst dann die Bits setzen und löschen oder abfragen. fchk
Facharbeit eine Platine die ich über Usb > programmieren kann und auch alle Steuerungen über eine C++ > grafikoberfläche ausführen kann. > Die Ventile für die einzelnen zutaten wollte ich halt per mausklick > über eine "Ausführende" Platine ansteuern. Das, was der TE schreibt, kann man selbstverständlich
-
Thread
Atmega 8; EEPROM bei Reset korrumpiert; alle 0 werden zu 255
Variable mit einem Wert, damit man genau weiß, wie groß die Zahl zum Beginn der Funktion/Schleife/Abfrage/etc ist. Und i wird auch nie den Wert 256 haben können - es ist nur eine 8 Bit große Zahl.
Das hier: [c]uint8_t *eeprom_adr = 0; // eeprom_adr++; if (eeprom_adr>(uint8_t*)255)[/c] ist auch Unsinn.
-
Thread
Echo HC-SR04 auswerten
Overflow zu laufen. Übrigens kann man die US Sensoren auch mit einfachem Arduino Code mm genau abfragen ohne Input Capture. C würde auch reichen. Schall ist eben relativ langsam ;-) Wie gehe ich in meinem AssemblerCode in der ISR zum Erfassen eines Pulse With vor 1. Alle in der ISR verwendeten
rising Ereignisses aufgerufen wurde. Wenn RisingEdge: 1. Am Anfang zwischengespeicherten 16Bit Wert für Rising ( aus ICR1L und ICR1H) z.B. im SRAM speichern. 2. Ein StstusBit für RisingCaptureDone setzen 3. Umschalten auf FalingEdgeCapture hierbei nicht vergessen das ICF Bit in TIFR1 zu löschen
-
Thread
Universaltestboard für AVRs
ist noch ein EEPROM auf der Platine, um irgendwelche Dinge dort abzulegen. Dieses EEPROM wird über I²C angesteuert (I²C Buchse mit Vcc und GND auch vorhanden). Für ein LCD ist auch eine komplette Leiste vorhanden, um es "huckepack" auf die Platine zu setzen. Zum Programmieren ist außerdem jeweils ISP
erwähnt habe sind nun die Ports jeweils nur auf eine Buchsenleiste. Außerdem musste ich ISP und I²C so machen, dass man über Jumper jeweils auswählen muss, ob man den 40- oder 28-poligen AVR bestückt hat. Wenn ich das nicht gemacht hätte wären durch diesen Aufbau bedingt einige Bits eines Ports untereinander
-
Thread
Dauerspeicherung auf SPI EEPROM mit Wrap-around und Sektorlöschung (avr gcc)
ic-sm-flash-16mb-spi-top-boot/dp/1697529 http://www.ebay.de/itm/WINDBOND-W25Q16BVSIG-25Q16B-16M-BIT-FLASH-8-SPI-BUS-SERIAL-EEPROM-BIOS-CHIP/121715258475?hash=item1c56cb746b:g:744AAOSwDNdVuQof
braucht nicht unbedingt mehrere Bytes. Man kann ja das selbe Byte "überschreiben", sofern sich die Bits nur von 1 auf 0 ändern. Ein einzelnes reicht also auch schon für 8 Änderungen.
-
Thread
USART Übertragung innerhalb Byte abbrechen
µC1 das senden sofort > einstellen und nicht noch das restliche Byte raustakten. Falls die Hardware das erlaubt, könntest Du im Senderegister die restlichen Bits des teilweise ausgesendeten Bytes auf
versuchen. Für diesen Ansatz braucht der Pin-Change-Interrupt "nur" während des Sendens durch den µC aktiv zu sein, kann in dieser Zeit aber (bei 9600 Bit/s) mit max. 4800hz ausgelöst werden, was je nach Anwendung ggf. nicht tolerabel ist.
-
Thread
Hilfe zu Interruptverhalten ATMEGA8 gesucht
[C] TIMSK &= (0 << TOIE2); [/C] so werden keine Bits gelöscht. [[Bitmanipulation]] > Deaktiviert wird der Interrupt mit GICR &= (0 << INT1); Du hättest genausogut [C] GICR = 0; [/
[C] TCNT1H = 0xC0; TCNT1L = tmr1l_preload; [/C] wenn du solche Dinge hast, in denen 2 Register zusammengehören und logisch gesehen ein 16 Bit Register bilden, aber aus technischen Gründen
-
Thread
Problem mit G-LCD-Ansteuerung
der Schreib-/Lese-Signale bezieht, dann musst du natürlich noch das Delay anpassen, mit dem du einzelne Bytes an den T6963C sendest, das ist nämlich auch nicht ohne! Kannst du mal den Schaltplan posten? Ich hab n T6963C mit 240x128 Pixeln an nem 8052 mit 22,1184MHz pappen, funktioniert wunderbar.
LCD-Ansteuerung betrifft, insofern also vollständig ;) @ Benedikt Stimmt. Ich will ja im Prinzip nur abfragen, ob die Statusbits gesetzt sind oder nicht. Da habe ich mir wohl nen kleinen Denkfehler einfallen lassen ^^ Jo, du hast recht, genau das meine ich ^^ will wissen, ob die letzten beiden bits gesetzt
-
Thread
Warte-Befehl in Assembler?
Takte bis zur Abfrage des Pegels. Bei dem AVR vergehen bei mir zwischen 11000 und 17000 Takten pro Bit. Bei der C-Control ist die Anzahl der Takte immer gleich. Wie gesagt, ich möchte den AVR nicht madig machen. Wenn
Conrad-Empfangsmodul. Die Routine ist auf meiner Webseite: http://www.specs.de/~danni/appl/soft/c51/thclock/index.htm Die einzelnen Zeiten messe ich mit einem Timerinterrupt von 64Hz. Dann ergeben sich folgende Zählerwerte: 0-Bit: 6 (6,4) 1-Bit: 12 (12,8) Pulsabstand: 64 Synchronimpulsabstand
-
Thread
Tastenmatrix Realisierung mit oder ohne IC
ich problemlos 40 Tasten in ner halben Sekunde angeschlagen und wieder losgelassen. Wenn man die einzeln zeitlich auflösen möchte, reichen 25ms Scanintervall nicht mehr.
sodass auch mehrere > Tasten gleichzeitig gedrückt werden können) aufbauen und mit einem > Teensy abfragen Für welche Anwendung oder mit welcher Ansprechzeit? Was sind das für Tasten(kontakte)?
-
Thread
USB CardReaderWriter & Atmega
Stell dir vor ich emuliere eine 256 MB SD Karte mit x Atmegas so kann ich 256 000 000 Temperaturen abfragen oder bloß 128 000 000 bei 16 bit etc. etc. Moderne Leute würden dann schon von GRID-Computing reden!!! Spass bei Seite: Ich will die "Atmega" Welt für mich erschließen, nicht einfach vorhandenes
Cardreader (SD-Card nehmen) ==> null Aufwand,billig - Auf der PC Seite mit Standard-Treiber per C,Java,C++ auf diese zugreifen (das kann ich, da bin ich zu Hause) -SD-Card Emulator mit einem ATMEGA bauen mit externer Peripherie (Temperatur,Stellglieder, LCD,LED's ...etc) -Primär zum kennenlernen
-
Thread
Frage zur Bitmanipulation
[c] wie kann man denn aus einer Variable tmp z.B. Bit3(0b00000100) auf ein anderes Bit eines PORTs übertragen(also z.B. PORTB.1)? if ((tmp & 0b100) > 0) PORTB |= 0b1; else PORTB &= ~0b1
langsamer weil längerer Code. - PORTB wird komplett neu beschrieben, problematisch wenn in Interrupts einzeln andere Bits des gleichen Port gesetzt/gelöscht werden.
-
Thread
zu wenig pins !!!
LCD Display: I2C Controller von Philips verwenden, braucht nur 2 Pins... 16 Tasten kann man mittels Multiplex abfragen, 2x8 Matrix, so dass man nur 2 Leitungen am Controller braucht, da die 8 sowiso (z.B. Datenbus)
von Benedikt: "16 Tasten kann man mittels Multiplex abfragen, 2x8 Matrix, so dass man nur 2 Leitungen am Controller braucht" Und die Adresse das Multiplexers??? Wird die dann nicht vom µC generiert??? Schliesslich muss er doch wissen welche Taste gedrückt
-
Thread
Debounce und Filter per PChg-Isr
In der Pchg_isr werden alle Pegelwechsel innerhalb einer Timerperiode gesammelt und das jeweilige Bit in "Changed_pins_sum" gesetzt. Eine 1 bedeutet hierbei, dass sich dieses Bit verändert hat, nicht jedoch, dass sein Pegel 1 ist...! In der Timer_Isr wird der letze PINB-Status nach "Deb_pinb" transferiert, wobei das Byte in "Changed_pins_sum" die Maske liefert, für jene Bits (die gekippten) die beim Übertrag nach "Deb_pinb" ausgelassen werden. Kurz: 'Wd_isr' ist eine Transferroutine von Byte A nach Byte C, wobei das Bitmuster im Masken-Byte B (hier das "Changed_pins_sum
-
Thread
CAN Netzwerk mit Gateway - mbed | NXP LPC 1768
// Variable wird übergeben in if Abfrage, array der Bits......// while(1) { if(can1.read(msg)) { // Datenbotschaft CAN einlesen
rein. Das sollte auch im main laufen, du kannst einen Timer nehmen und in dem zyklischen Aufruf abfragen ob der Timer > x ms ist und dann die Aktion ausführen. [c] wait(0.02); // Es wird alle 200ms der Status eingelesen [/c] wartet 20 ms, aber wirst du am hektischen Blinken der LED sehen.
-
Thread
LM73 über I2C mit ATmega8 ansprechen
machen, was in der functional Description steht, oder? Ich will das "Identification Register" abfragen. Halt um zu schaun ob unter derundder Adresse das IC erreichbar ist. So, im Datenblatt steht dass das 15 Bit lang ist (S.16). Also schau ich auf Seite 11 nach, "(b) typical pointer set followed by
100000L #include <avr\io.h> #include <util\delay.h> #include <stdlib.h> #include "twimaster.c" [...] //Adresse abfragen //--------------------------------------------------------------------------- // Verfahren: datasheet, 1.0 b //---------------------------------------------------------
-
Thread
sd-Karten, Sektoren, Cluster
fragmentierten Dateien, mit welchem Sektor eines Clusters anzufangen ist? sector ist bei Chan ein 32bit-Wert. Wie wird der 33bit-Bereich der Karte angesprochen?
(8); case 4://busy-abfrage 8xRx DMA_STATUS = 5; DMA3_transfer_from_SSP0_to_buffer(8); break; case 5://busy-abfrage auswertung if(buf_rx[7]=!255){ DMA_STATUS = 4; DMA2_transfer_from_buffer_to_SSP0
-
Thread
DS18B20 probleme mit Pull-Up
von 750ms selbst erzeugt und danach die Temperatur ausgelesen. Dann erhalte ich den Wert 127,9375°C. Das entspricht dann lauter einsen auser die 5 bit fürs vorzeichen die sind Null. Das ist in soweit komisch, dass das nicht der Standartwert ist (auslesen ohne Temperaturconversion 85°C). Hier noch
bit. Oder habe ich da was falsch verstanden? Die Pull-Ups hab ich mal raus. Ändert leider auch nichts. So schaut die Read-bit funktion nun aus [c] uint8_t ds1820_re_bit(uint8_t used_pin
-
Thread
Funkanbindung - Fortsetzung aus Hauptthread
ob man zwei Subnetze per Funk verbinden will, z.B. um zwei Stockwerke zu verbinden oder ob man einzelne Sensoren/Aktoren mit dem Bus verbinden will. In ersterem Fall sollte Strom kein Problem sein, in letzterem ist die Frage ob der Stromstoß eines Piezokristalls langen kann um den µC mit Strom zu
UART (RxD) hängt das RCM120 Modul von enocean. Ein 20x2 Standard LCD Modul hängt an Port A und D (8bit mode) und drei Tasten für die Menüsteuerung an Port E. Da der ATmega103 kein TWI eingebaut hat - hab ich nen software I2C an Port B realisiert. Der Relaisteil besteht aus nem I2C IO-Expander PCF8574
-
Thread
Zeitschleife Feintunning
(cbg) schrieb: >Wenn dus genau haben willst, dann machs mit einem Timer Der leider nur ein 8-Bit-Typ ist... MarioT (Gast) schrieb: * AVRdelayloop3.zip (267 KB, 5 Downloads) >>Wie würde ich das in C für einen AVR programmieren? >Hab ich leider keine Ahnung. >ASM sehe Dir das mal an.
Aha und Methodenaufrufe und Abfragen dauern auf deinem µC also die Taktzahl 0... interessant.
-
Thread
PS2 Maus
Hallo Ich versuche, mit einem µC eine Ps2-Maus auszulesen. Das lesen von der Maus funktioniert: die Maus macht dem selbstest, sendet 0xAA für erfolfreich an den µC und dann 0x00 als Device-ID für eine PS2-Maus. Die Maus sendet die
nicht erst zur maus gelangt. Nach dem Inhibit und Request-to-send soll die maus erkennen, dass der µC Daten senden will. die maus soll dann takte auf der clockleitung erzeugen, um die datenbits einzeln einzutakten. mein code hängt in einer schleife, in der er auf low an clock wartet, also auf den takt
-
Thread
Mikrocontroller Einstieg (AVR,PIC)
8 bit ist. Wie das nun genannt wird, ist mir ja relativ egal. Und mit C ist das eh automatisch im Hintergrund. Die C-Eignung hatte ich oben ja schonmal erwähnt. Ich programmiere seit ca 8 Jahren PICs mit
nicht schwer, _weil_ ich keinen anderen kannte ;) Ich habe später mal ASM für einen (ich glaube) 80C535 gelernt. Was mich da z.B. gestört hat war, dass man zwar einen 1Bit-Speicherbereich hatte, um einzelne Bits abzulegen, aber ich konnte nicht (wie von PIC-ASM gewohnt) einzelne Bits jedes beliebigen
-
Thread
Phänomen Unterprogramm schlägt wieder zu!
Reihenfolge, zuerst high, dann low beim schreiben und erst low, dann high beim lesen, ist nur bei 16Bit-Timer nötig um zu einem Zeitpunkt 16 Bit zu schreiben oder zu lesen, sonst hätte man unter Umständen ein verfälschtes 16Bit-Ergebnis beim lesen, bei einem Prescaler von 1 sowieso. MfG Andi
Hallo Dominik! Du wartest mit dem ADIF-Bit (ADC Interrupt Flag) bis eine Konvertierung fertig ist. Weis nicht, ob das 100%ig geht, wenn das Bit ADIE (ADC Interrupt Enable) nicht aktiviert ist (0): ldi temp1, 0x00 ;ADC initialisieren
-
Thread
8 Tasten einlesen (Möglichkeiten)
wenn mehrere Taster gedrückt sind, dann ist das Ergebnis sowieso unsinn. Es würde also reichen die einzelnen Bits zu kodieren.
mehrere Taster gedrückt sind, dann ist > das Ergebnis sowieso unsinn. Es würde also reichen die einzelnen Bits zu > kodieren. Stimmt. Es gibt keine Priorität, da ein Drücken von zwei Tasten gleichzeitig unsinn wäre.
-
Thread
AVR I2C/TWI: wie sag ich als Slave dass ich busy bin?
Hallo zusammen, ich hab grad ein kleines Verständnisproblem beim i2c-slave am AVR: ich hab einen kleinen Adapter gebaut, der mit einem ATmega328P ein LCD-Display ansteuert, und diverse Kommandos und Daten per i2c empfängt. Sobald ich per i2c ein Kommando kriege,
writing the TWEA bit to one again.
-
Thread
GCC [STM32] -> wie sehen wie ein struct realisiert wird?
_t can_data; } tu_test; [/c] Da wäre es für mich sehr interessant, wie der Compiler das genau umsetzt, sprich ob er wirklich (in Abhängigkeit des Optimize?) Stuffing-Bits einführt, etc. *Ist jemandem eine Möglichkeit bekannt
aussehen. Maximal wird Padding am Ende der Struktur vonnöten sein. Also für deine erste Struktur: [c] typedef struct { uint64_t d; int32_t b; bool c; uint8_t a; } ts_test; [/c] (bool ist normalerweise ein 8-Bit-Typ, aber da das nicht immer so sein muss, noch oberhalb von uint8
-
Thread
Umfrage: welche IR-Protokolle nutzt ihr mit IRMP?
habe nach wie vor nur /eine/ Funktion die ich aus dem Timer-Interrupt aufrufen muß und das API zur Abfrage ist auch immer noch das gleiche. Und wieder ist das superpraktisch. Und IMHO viel besser als jetzt zwei handoptimierte Protokolldecoder einzeln zu programmieren, einzeln in den Timer-Interrupt
Vorteil von IRMP/IRSND ist, dass der auf mehreren Mikrocontrollerfamilien laufende Code hier auf µC.net zum Download bereitsteht. Dagegen stehen MOBYs und c-haters "Lösungen" in den Sternen - wer lange Arme hat, mag danach greifen.
-
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
EEprom Schreiben und Lesen
die Start- und die Ende-Adresse des EEPROMs, damit du erkennen kannst, wann das EEPROM voll ist. In C übernimmt der Compiler das Aufaddieren der Adresse durch das Pointer-Inkrementieren automatisch, also wenn du 8-Bit-Werte speicherst, wird die Adresse immer um 1 Byte erhöht, bei 16-Bit-Werten um 2 Byte
doch mit Words, da muss ich doch normalerweise 2 addieren!?" EE_ADR ist ein Pointer auf einen 16Bit Wert, also auf 2 Bytes. Wenn du in C den Pointer um 1 erhöhst zeigt er auf den nächsten 16Bit Wert. Bei einem byteorientierten System wie dem AVR zeigt der Pointer also jetzt auf die Adresse die 2
-
Thread
Warum Keil (oder andere unfreie Compiler) statt SDCC?
Nop schrieb im Beitrag #7186290: > Das liegt an Deinen bekanntermaßen dürftigen C-Kenntnissen - nicht am > Compiler. Und du meinst, ein Compiler darf meine Kenntnisse über irgend etwas abfragen und wenn es ihm nicht paßt, mir einfach mein Geschriebenes wegstreichen? Nö, sowas
im Beitrag #7186318: > Und du meinst, ein Compiler darf meine Kenntnisse über irgend etwas > abfragen und wenn es ihm nicht paßt, mir einfach mein Geschriebenes > wegstreichen? Ein C-Compiler darf (nicht: muß!) Dinge unter der as-if-Regel streichen, wie das im C-Standard vorgesehen ist. Wenn Du
-
Thread
Programm für Testgerät
dir das 'Kabel' als nicht existent vor. Dann bleibt von deiner Aufgabenstellung übrig: An einem µC sind 10 LED angeschlossen, die auf Tastendruck aufleuchten sollen. Bis auf den Teil mit dem einzelnen Tastendruck, ist das so ziemlich die 2.te oder 3.te Einsteigerübung. Gleich nach "eine LED soll
Portpin auf 0 oder 1 zu setzen, je nach Umgebungsbedingen, das ist nun mal das kleine Ein mal Eins der µC-Programmierung.)
-
Thread
DS18b20 Reset geht nicht
damit sagen? PA0 ist ein #define aus einer Header Datei. Du kannst nicht PA0 (was immer 0 ist) abfragen sondern das Bit 0 (=PA0) aus dem PINA Register. Das ist dein Fehler.
Und fang als erstes damit an, die eine Funktion zu machen, die ein einzelnes Byte ausgibt. Das ist doch grausam, wenn du da jedesmal immer wieder den gleichen Ausgabecode in jeder einzelnen Funktion hast. Eine Stringausgabe ist dann ganz simpel [C] void lcd_string(
-
Thread
STM32 UART buffer rx
dazwischen gekommen ist? Mit sowas muß man doch bei einer seriellen Strippe zwischen dem PC und deinem µC auch rechnen. Normalerweise schreibt man sich einen Treiber für den UART, den man abfragen kann, ob er denn Empfangsdaten hat und der die empfangenen dann zeichenweise herausgibt. Dann ist es für
Mathias G. schrieb im Beitrag #6331322: Ganz schön verquer. Man braucht kein Array, wenn man nur einzelne Zeichen per HAL liest. Es gibt einen Adressoperator [c] #define BUFFER_SIZE 10 uint8_t empfangen[BUFFER_SIZE]; void USART1_IRQHandler(void) { char rx; HAL_UART_IRQHandler(&huart1);
-
Thread
LED Lauflicht mit Fader Effeckt
Hätte noch ne Software-PWM, 12-Kanal, 8 bit die ähnlich der 2. Methode in dem vorhin genannten Artikel konstruiert ist. (In C, für PIC18F2550). Läuft bei 200 Hz, ca 10% Prozessorlast.
Das Flackern liegt vermutlich an der Geschwindigkeit. Der µC läuft bei mir mit 8 MHz, kontrollier mal deine FuseBits.
-
Thread
Pullup aktivieren in AVR-Assembler
aber ginge das mit Abfrage des bisherigen Status auch kürzer? Oder auch: kann man einzelne Bits da draussen ausserhalb von R16-R31 auch direkt setzen? lds r16,PORTB_PIN2CTRL sbr r16,8 ;Bit 3 für Pullup enable setzen sts
Noch ein Tipp zur Schreibweise, einiges kann eindeutiger schreiben: [c]; alt sbr r16,8 ;Bit 3 für Pullup enable setzen ; besser sbr r16,(1<<3) ;Bit 3 für Pullup enable setzen [/c] Auch verwende ich sehr viele Macros, die die Arbeit im Code erledigen. Auch kann
-
Thread
Fragen zum US Sensor JSN-SR20-Y1
nachbauen... Du könntest auch entsprechend viele Module sektorweise aufbauen und sie sequentiell abfragen. Dazu müsste der Öffnungswinkel bzw. die Richtcharakteristik bekannt sein.
zuverlässige Positionierung möglich ist. Ziel: max. 10 cm Abweichung der Position Dafür sollten die einzelnen Entfernungsmessungen mind. 2 cm genau sein. Rahul D. schrieb im Beitrag #7691723: > Bewertet jemand, der wenig Ahnung hat... Stimmt. Deshalb möchte ich bei den einzelnen Modulen auf beschaffbare
-
Thread
Arduino mega2560
---------------- avrdude: Version 6.0.1, compiled on Apr 3 2014 at 23:12:16 Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/ Copyright (c) 2007-2009 Joerg Wunsch System wide configuration file is "C:\Programme\Arduino/hardware/tools/avr/etc/avrdude.conf"
Ulfuse:w:0xFF:m avrdude: Version 6.0.1, compiled on Apr 3 2014 at 23:12:16 Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/ Copyright (c) 2007-2009 Joerg Wunsch System wide configuration file is "C:\Dokumente und Einstellungen\peter\Eigene Dateien\Downloads
-
Thread
Signal mit Timer erzeugen
Ich glaub, Assembler erfordert i.a. mehr Intellenz als C...
Das {} geht auch nur bei der Array-Deklaration. Im Programm selbst kannst du nur auf die einzelnen Feldeinträge zugreifen. Vielleicht solltest du dir eine andere Lösung überlegen (Bits in einem Byte auswerten). Dann bräuchte man nur eine Ausgabe-Routine, der man einen ein Byte übergibt, das