-
Thread
Raspberry pi Pico rp2040 RS485 Implementierung
Interrupt, der erst ausgelöst wird, wenn das Byte wirklich verschickt ist. Es gibt zwar ein BUSY Bit, aber keinen Interrupt dazu. Ich könnte das Bit zwar pollen, aber das ist keine gute Lösung. Hab ich was im Datenblatt übersehen? Gibt es noch eine andere Möglichkeit den output enable zu setzen
> Es gibt zwar ein BUSY Bit, aber keinen Interrupt dazu. Wirklich? Das waere aber echt traurig wenn die das vergessen haetten. > Gibt es noch eine andere Möglichkeit den output enable zu setzen? Du koenntest beim uebertragen
-
Thread
Sinuswerte für PWM berechnen
? ich benutzte ein 16-Bit Timer Danke für eure Hilfe Viktor
jetzt soll ich meine Sinuswerte anpassen. wie könnte ich vorgehen? ich ändere ZB die Sinus werte auf 10Bit und gebe als maximalwert in dem Zälregister des ersten Timers 1024 statt 100? Gruß
-
Thread
ATtiny84 Pin Change Interrupt
/ replaces above statement sleep_enable(); // Sets the Sleep Enable bit in the MCUCR Register (SE BIT) sei(); // Enable interrupts sleep_cpu(); // sleep
Tiefschlaf liegt. Ich würde hier eher den Clock Prescaler nutzen, um die Taktfrequenz herab zu setzen. Ein passiver IR Sensor wäre hier besser, der bräuchte weniger Standby-Strom.
-
Thread
Gratis 8/16-Bit Softcore Prozessor
Wohl weil ein Blockram 18kBit gross ist und eine Instruktion üblicherweise 18 oder 16 Bit breit. Das ergibt dann 1k Instruktionen. Bei Proteus kannst du bis zu 64k Instruktionen ausführen. Hier gibt es diese Beschränkung also nicht
Steuerbert schrieb im Beitrag #1805771: > Bei den größeren 8Bit PICs gabs da mal 1-2 Bank-Bits Jaja, das haben schon viele angefangen. Trotzdem ist dieses Bank-Switching einfach nur hingebastelter Murks. > Vermutlich könnte man sowas sogar nachträglich recht
-
Thread
zwei 8 bit Variablen aus 16bit Variable
nicht dahinter was ich falsch mache: Ich habe folgenden Code: volatile uint8_t var1; // 8bit variable volatile uint8_t var2; // 8bit variable volatile uint16_t var3; // 16 bit variable Dann in der "compare match B ISR" des 16bit timer1 im ATmega168: var1 = OCR1BL ; // lowbyte
haben eine zu schlechte Aufloesung in meinem Falle. Ich mache also beides mit dem 16bit Timer1. Ich habe den 16bit-Timer1 nun so konfiguriert, dass er im Fast-PWM-Mode laeuft und dass TOP = ICR1 ist. Im Register ICR1 habe ich den Wert 4095 stehen, entsprechend 12bit PWM Aufloesung.
-
Thread
Lauflicht Pic 16f877
Loop DIese Schleife läuft unendlich, das ist schon mal der richtige Start. Du setzt nun vorher das Bit ganz rechts, und schiebst es im ersten Durchlauf nach rechts raus. Also erstmal rlf nutzen, oder vorhher das Bit ganz links setzen. Dann musst du noch dafür sorgen das es wenn es ganz links angekommen
,Bit call Funktion goto Label_x dabei musst nur bedenken dass am ende immer zum Label_x gegangen wird, egal wie das Bit steht, denn call kommt aners als ein goto an die stelle zurück :-) Zur
-
Thread
Unterschiede zwischen Lock Bits und Fuse Bits im AVR
Hallo, was sind Unterschiede zwischen Lock Bits und Fuse Bits im AVR? Ist es so, dass Fuse Bits mehrmals umprogrammiert werden können und Lock Bits nicht? Ich möchte meine Firmware gegen Auslesen schützen, aber updatefähig (über JTAG). Reicht das
Die Fuse_Bits nehmen Hardwareeinstellungen vor. Die beiden Lockbits dienen dem Softwareschutz. Wie du sie setzen kannst/mußt hängt von deinem Updateprocedere ab. Mit Chiperase lässt sich der Chip putzen, samt
-
Thread
Schaltparameter Fernbedienung
Code richtig interpretiere ist es diese Stelle: [c] uart_putc(Data); //entsprechende Ausgänge setzen PORTB ^= BitMask; [/c] Um nun 1,5 sek. Pause zu haben und danach wieder abzuschalten kann man dann doch so erweitern: [c] uart_putc(Data); //entsprechende Ausgänge setzen PORTB ^= BitMask
richtig interpretiere ist es diese Stelle: > > [c] > uart_putc(Data); > //entsprechende Ausgänge setzen > PORTB ^= BitMask; > [/c] > > Um nun 1,5 sek. Pause zu haben und danach wieder abzuschalten kann man > dann doch so erweitern: > > [c] > uart_putc(Data); > //entsprechende Ausgänge setzen
-
Thread
Hilfe beim Brennen eines Atmega8 ( Fusebits)
zu markieren.. Der Resetpin kann man nicht auswählen. Beim Atmega 8 ist dies der Pin 1. Das Fuse bit RSTDISBL programmiert diesen Pin um. Dies sollte also nach dem Schreiben des Programms geschehen. Die anderen Fuse Bits könntest du auch vorher setzen. Wichtig ist, dass die Clock nicht falsch eingestellt
nicht wie nötig eine Auswahl vornimmt. Meine Überlegung : 1. Brennen vom Flsah Speicher 2. Setzen der Fuse Bits ohne RSTDISBL 3. Verifizieren ob bis hier alles stimmt 4. Wechseln auf AVR Dude mit AVR 8 Burn und auslesen der Fuse Bits 5. Nachsetzen von RSTDISBL und neu brennen der Fuse Bits
-
Thread
C ohne if() - in einzelnen Fällen möglich?
Diese if-Anweisung kann der Compiler gut erkennen und entsprechend optimieren. Z.B. mit Bit-Setz oder Lösch-Befehlen, sofern auf der Architektur vorhanden
Es sind 5 Befehle: in, lds, bst, bld, out > Von anderen AVR Modellen bin ich gewohnt, dass das Setzen/Löschen > eines einzelnen Bits in jeweils eine einzige Instruktion übersetzt wird. Schon, aber bei bst (Bit Store from Register to T) wird das Bit im Status-Flag T zwischengespeichert und mit bld
-
Thread
MSP430 ADC sehr merkwürdige Werte
Du must in ADC12CTL2 den ADC auch auf 12Bit umschalten. Dein ADC steht mit 1023 als maximalen Wert wahrscheinlich auf 10Bit. Das geschieht mit den Bits 4 + 5. Bit 5 = 1, Bit 4 = 0 ergibt 12 Bit Aufloesung
Nein mein Maximalwert beträgt 4095 Bit, habe ich auch so mit 3 V auch getestet (Ref. Spg. ist 2,5 V aber ADC verträgt 3,6 V). Also kann man davon ausgehen das der ADC mit 12 Bit arbeitet.
-
Thread
Mikrocontroller
linke obere Eck des Zeichens zu liegen kommen soll) Zeichensatz[48][0] und dort das rechteste Bit: das ist 0 also wird an 12/15 kein Pixel gesetzt Zeichensatz[48][1] und dort das rechteste Bit: das ist 0 also wird an 13/15 kein Pixel gesetzt Zeichensatz[48][2] und dort das rechteste Bit: 0
bit von rechts: das ist 0 also wird an 16/16 kein Pixel gesetzt Naechste Zeile Zeichensatz[48][0] und dort das dritte bit von rechts: das ist 1 also wird an 12/17 ein Pixel gesetzt Zeichensatz[48
-
Thread
Ansteuerung von ca. 1200 LED´s
setzen. Wenn nicht dann kannst du die Schieberei des einzelnen Bits genau verfolgen, wie es von Fach zu Fach hopst und an deinem Wunschfach stoppt. Gewisse Lichtspielereien wären dann z.B.: Du veränderst
musst Du erst einmal 30 mal 0 raustakten, dann einmal eine 1, dann wieder 119 mal eine 0. Die Bits lassen sich beim MBI5026 (oder HC4094) nicht kollektiv setzen oder löschen, nur immer hübsch der Reihe nach durchschieben. Mit der LE-Leitung kannst Du dafür sorgen, dass die Daten erst dann an den
-
Thread
Timer Overflow Interrupt behindert Externen Interrupt?
2 für Spieler 1 setzen s_1 = 0; // Für Abfrage in main setzen, wenn = 0 --> zwei Flanken --> Start s_1_Start = 1; // Startbit Spieler 1 gesetzt } } if( !(PINA &
2 für Spieler 2 setzen s_2 = 0; // Für Abfrage in main setzen, wenn = 0 --> zwei Flanken --> Start s_2_Start = 1; // Startbit Spieler 2 gesetzt PORTC=~PORTC; } }
-
Thread
LED Würfel ATTINY13
>Wo liegt mein Fehler? Eine oder mehrere ODER Verknüpfungen setzen keine bereits gesetzten Bits zurück!
schrieb im Beitrag #3831968: >>Wo liegt mein Fehler? > > Eine oder mehrere ODER Verknüpfungen setzen keine bereits > gesetzten Bits zurück! Auf den ersten Blick sollte "PORT =" statt "PORT |=" reichen. mfg.
-
Thread
Ausgangszustand beim Toggle OC0A on Compare Match setzen
umgekehrt. Gibt es eine "saubere" Möglichkeit den OC0A oder OC0B vorab auf einen anderen Zustand zu setzen? Also irgendetwas besseres als z.B. den OC0A auf togglen zu setzen TCCR0A |= (1<<COM0A0), dann einenmal den Compare Match zu erzwingen TCCR0B |= (1<<FOC0A) und anschließend erst den TCCR0A |= (1<<COM0B0
Portregister wird in OC Mode einfach >> nicht benutzt. > > Und genau darum eignet sich das setzen des PORTS nicht um den Wert beim > Togglen über OC0x zu beeinflussen. So ein Quatsch. Man setzt *erst* das Bit in PORTx auf den gewünschten Anfangswert und schaltet *dann* die Funktion "Toggle
-
Thread
STM32 - Servoansteuerung
Bernd schrieb: > TIM2->DIER = 0x0002; Da sind noch mehr Bits drin.
/1200)/frequency)-1; // load cont auto reload register with period value bit_on(TIM1->CR1, DIR); // DIR direction down bit_on(TIM1->CR1, URS); // only over/underflow generates an interrupt bit_on(TIM1->DIER, UIE); // Update
-
Thread
32Bit Variable in Assembler
genauso so wie du es mit einer 16bit varibale machst. addi R16, 1 addwi R17, 0 addwi R18, 0 addwi R19, 0 verlgeich muss dann extra gemacht werden.
klein, nun etwas erweitert werden soll, wollte ich es auch gleich weiter in Assembler machen. Evtl. Setze ich es aber auch ne in C auf mal gucken, trotzdem danke.
-
Thread
Probleme mit free-running ADC
komisch. Freilaufend habe ich's auch noch nie versucht, allerdings initialisiere ich meinen ADC und setze erst dann in einem eigenen letzten Schritt das ADSC-Bit im ADCSR-Register.
Normalerweise kann man die Interrupt Flags nicht manuell setzen, sondern nur löschen (indem man eine 1 hineinschreibt). Oder ist das beim Mega32 anders? In den meisten mir bekannten Da6tenblättern steht da immer 'Writing a logical 0 to the Bit has no effect' oder
-
Thread
Raspi Pi Pico schnell genug um 4Mhz Z80 zu sniffen?
also den Output vom ROM Modul) und in ein 16 KByte Array schreiben. Dazu muß ich die unteren 14 Bits der Adresse auslesen und die 8 bits vom Datenbus lesen. Das ROM ist immer im Adressbereich C000-FFFF, also muß ich mir die oberen beiden bits nicht merken und komme mit 16Kbyte klar. Ich habe jetzt
verwenden. Und glücklicherweise gibt es hier auch genug. Wenn ich jetzt z.B. den PortC mit den Bits 0-2 auf pullup und input setze, während ich den rest auf output setze, dann kann ich sehr einfach prüfen ob alle drei signale low sind. if (PINC == 0) { addressL = PINA addressh = PINB
-
Thread
Nochmal Hilfe zum DOGXL
Init_DOGXL(void){ volatile uint8_t i; INIT_DOGXL_PINS; // CMD u. RST für's LCD setzen. for(i=200; i>0; i--){;}; // delay a little bit... DOGXL_RELEASE_RST; // ... Set_Vbias_Pot(0x9C); // VBIAS Cmd & Value(hier 0x9C !!!) Clear_Screen(); // RAM mit
ansteuern. Um ein Byte (4 Pixel) gezielt zu Beschreiben gehst du wie folgt vor: Kommando Page setzen Kommando Low(Spalte) setzen Kommando High(Spalte) setzen Datenbyte setzen MfG Spess
-
Thread
Bitte um Hilfe bei der Programmierung von AVR8-Mikrocontrollern in C
Hatten wir das nicht letztens schon? Arduino bereitet alle Timer Für eine 8 Bit PWM vor. Hatten wir das nicht letztens schon? Setze, bevor du irgendwas anderes mit dem Timer tust, die Controllregister auf Null. Hatten wir das nicht letztens schon? Bernd S. schrieb im Beitrag
Beitrag #7515630: > if( TIFR3 & OCF3A ) { Die Zeile kommt mir verdächtig vor. Soll die das OCF3A Bit (Bit 1 im TIFR3, Atmega2560) abfragen oder das TOV3 im Bit 0?
-
Thread
Protokoll Level zusammen mit Tasks, brauche hilfe
Eric B. schrieb im Beitrag #4672376: > Dir ist bewusst, dass das parity-Bit abhängig vom gesendeten Byte > gesetzt oder gelöscht wird und du das nicht beliebig setzen kann? Ich mache eine 9bit Übertragung. Dabei kann ich das neunte Bit manuell setzen. Eric B. schrieb
im Beitrag #4672392: > Eric B. schrieb im Beitrag #4672376: >> Dir ist bewusst, dass das parity-Bit abhängig vom gesendeten Byte >> gesetzt oder gelöscht wird und du das nicht beliebig setzen kann? > > Ich mache eine 9bit Übertragung. > Dabei kann ich das neunte Bit manuell setzen. Ok, dann
-
Thread
16 Bit Timer mit Atmega 1284p
wenn die ISR mit 20 Hz getriggert wird. Im Falle der obigen Formel ergibt sie sich durch das Setzen des "Toggle on compare match"-Bits, im Fall des TEs erfolgt das Toggeln explizit durch die XOR-Anweisung auf dem Portpin.
. wie ist der Ausgabe PIN initialisiert. Laut Datenblatt findet sich zu Port C: Port C is an 8-bit bi-directional I/O port with internal pull-up resistors (selected for each bit). The Port C output buffers have symmetrical drive characteristics with both high sink and source capability. As inputs
-
Thread
gemessene Frequenz mit UART verschicken
Zeichen senden könntest. Da sollte doch langsam klar werden das hier konzeptionell was nicht stimmt. Setze das alles in die main Schleife und sende mit TX(UDRE) interrupt und Puffer. Dann wird nämlich das was du jetzt machst nur noch <1% Last bedeuten. und du hast auch kein Problem 16 oder 32 Bit zu senden
verstehen muss was auf beiden Seiten passiert. Ich muss eine zehntausender Zahl verschicken also zwei 8bit-Zeichen und dann wieder zusammen setzen. Ich meld mich nochmal wenn ich besser durchblick.
-
Thread
Atmega 8; EEPROM bei Reset korrumpiert; alle 0 werden zu 255
können den EEPROM getrennt löschen und schreiben. Das halbiert den Verschleiß. Löschen heißt auf 0xFF setzen. Man kann auch ohne Löschen beliebig weitere Bits von 1 auf 0 setzen.
Peter D. schrieb im Beitrag #6756988: > Man kann auch ohne Löschen beliebig weitere Bits von 1 auf 0 setzen. Setzen die eeprom_update_xxx Funktionen das um? Die eeprom_write_xxx werden das doch sicherlich nicht tun.
-
Thread
Hilfe um 8 Bitfelder in uint8_t umzuwandeln (ESP32)
1; uint8_t bit3:1; uint8_t bit4:1; uint8_t bit5:1; uint8_t bit6:1; uint8_t bit7:1; } Input; uint8_t Byte; } Input_ut; int main() { Input_ut Test; Test.Byte=0; //Bit 0 setzen und ausgeben Test.Input.bit0 =1; printf("%d\n", Test.Byte); //Ausgabe: 1 //Bit 7 setzen und ausgeben Test.Input.bit6 =1; printf("%d\n", Test.Byte); //Ausgabe: 65 (64+1) return 0; } [/c]
-
Thread
Komparator Aufbau - diskret oder über µC?
das Signal vom Prozessor filtern lassen willst. Alles, ohne die HW zu ändern, nur ein paar config-Bits. Wenn die 50mV nur ein grober Richtwert sind, nimm die internen. Wenn die Hysterese zwischen 49 und 51mV liegen muss, ... hast Du andere Sorgen.
sehr klein und sehr schnell abgearbeitet. Probier doch einfach mal aus, einen Pin bei >0,6V zu setzen und bei <0,55V zurück zu setzen. Dauert das zu lange, kannst du immer noch den Komparator nehmen. Gruß Carsten
-
Thread
LCD ansteuerung mit einem ATMega16 und I2C
müssen auf aufeinanderfolgenden Pins liegen //Adresse des Slave Devices MCP23017 //Die ersten 4 Bit sind laut Datenblatt definiert(0100) //Die letzten 3 Bit werden über die Pins A0-A2 definiert #define SLAVE 0b0100000 // LCD DB4-DB7 <--> PORTB an MCP23017 Bit GPB1-GPB4 #define LCD_PORT
<--> PORTD Bit PD4 (RS: 1=Data, 0=Command) #define LCD_RS 7 // LCD EN <--> PORTD Bit PD5 (EN: 1-Impuls für Daten) #define LCD_EN 5 [/c]
-
Thread
PIC 16F690 Assembler
;Umschalten auf Bank 0 (Bit löschen) call Warten clrf PORTB ;alle LEDs ausschalten bsf PORTB,0 ;Bit 0 setzen im Port-Register Schleife call Warten
Bank 0 (Bit löschen) > call Warten > clrf PORTB ;alle LEDs ausschalten > bsf PORTB,0 ;Bit 0 setzen im Port-Register > > Schleife > call Warten ;Aufruf der
-
Thread
HD44780 LCD - Simulation OK, AVR bleibt in Funktionen stecken
_t data ) { >// data &= 0xF0; // obere 4 Bit maskieren >// LCD_PORT &= ~(0xF0>>(4-LCD_DB)); // Maske löschen >// LCD_PORT |= (data>>(4-LCD_DB)); // Bits setzen > LCD_PORT = data; // Bits setzen > lcd_enable(); >}
0xF0; // obere 4 Bit maskieren LCD_PORT &= ~(0xF0>>(4-LCD_DB)); // Maske löschen LCD_PORT |= (data>>(4-LCD_DB)); // Bits setzen lcd_enable(); } [/C] Daten oder Steuer? Ganz klar Daten. Und zwar
-
Thread
PIC16F1455 treibt LCD nur mit angeschlossenem PICkit3
Viele LCD-Libs sind leider fehlerhaft und setzen nicht richtig den 4-Bit Mode. Oft fällt das nicht auf, wenn das LCD nach dem Power-On im 8-Bit Mode startet. Hier mal der korrekte Ablauf, um das LCD aus einem unbekannten Zustand sauber in den
Ob der Compiler das in "einen" Befehl packt der den Port auf einmal setzen kann? Oder kommen da tatsächlich 4 Bitsetzer raus, so das die Bits seriell am Port erscheinen?
-
Thread
A2DP Bluetooth Modul China eBay
nur BT-Name und Kopplungscode verändern. Hab mir mal die Vorgehensweise notiert: 9600 Baud Data Bits: 8 Stop Bits: 1 Partity: None Send on enter: CR-LF TX-BT -> RX-COM RX-BT -> TX-COM AT#MMBassmachine BT-Name auf Bassmachine setzen AT#MN4711 BT-Pin auf 4711 setzen AT#MH Disable
BLK-MD-SPK-B(-PCSA ?). Das besitze ich ja auch. Ich zitiere noch mal meine Einstellungen: 9600 Baud Data Bits: 8 Stop Bits: 1 Partity: None Send on enter: CR-LF Mit den folgenden Commands komme ich weiter: AT#MMTesttest BT-Name auf Testtest setzen AT#MN1234 BT-Pin auf 1234 setzen AT#MH
-
Thread
uC from Scratch
habe mal einen Watchdog-Timer der eine ISR aufruft auf einen Arduino implementiert. Dafür musste ich Bits in bestimmten Registern setzen. Da lacht ihr jetzt bestimmt drüber aber vielleicht ist das ja schon was. Mit KiCad komme ich klar. Wäre nicht die erste Platine, die ich mache. Nur die erste mit einem
wurden. Bei PIC24 sind die Peripherieregister Teil des Kerns, d.h. der Prozessorkern kann dort atomare Bit-Operationen ausführen. Bei PIC32 sind die Peripherieregister nicht mehr Teil des Kerns, sondern laufen asynchron. Wenn der Prozessor ein Bit setzen will, muss er das Register lesen, Bit setzen und Register
-
Thread
mit kurzen Impulsen schalten / gegenseitig entriegeln / Attiny2313
Porteinschalten überspringen... in r1,porta ;Port einlesen, or r1,r0 ;Bit setzen out porta,r1 ;und zurückschreiben lpm r0,z+ ;Bitmuster PortB holen in r1,portb ;Port einlesen, or r1,r0 ;Bit setzen out
exti0es1 ;nein, nicht shiften, Status erhöhen und fertig... lsr shiftreg ;Bits weitershiften sbrs flags,bit ;ist Bitwert=1? - nein... sbr shiftreg,32 ;ja, Shiftbit setzen rjmp exti0es1 ;Status erhöhen und fertig... exti03: ;langen
-
Thread
Array into int und dann Bit Verschiebung
Spezi schrieb im Beitrag #3889910: > In meiner Anwendung soll in Value doch nur 24 Bit stehen. Es gibt aber auf dem AVR keinen Standard Datentyp mit 24 Bit. Der nächst größere hat 32 Bit. Wenn du also dem Compiler die Arbeit aufbürden willst, das byteübergreifende Schieben für dich
) auf 0 setzen.
-
Thread
Attiny2313 + LM7001 + Bascom - Wer kann helfen?
LM7001 > ankommen könnten. Das kannst du an deiner Schaltung recht einfach mit den TB und B0..B2 Bits selber testen. Ein gesetztes TB sollte ja ein 8 Hz Timebase Signal am Ausgang /BO1 erzeugen, die Bn Bits setzen die Bandwahl Ausgänge(siehe die Tabelle). Mit diesem Wissen kannst du schon mal das
umgeht, weiss ich aber nicht. In meinem C Programm setze ich den gesamten String vorher zusammen und bit-bange ihn dann auf dem LM7001, damit ich vorher mir die Werte für Raster, TB, B-Bits und S zusammensetzen kann. Das sieht dann so aus: [pre] Data
-
Thread
ATmega128 reagiert nach fusebit setzen nicht mehr
Hi leute! habe heute versucht einen Takt auf XTAL1 zu legen um die Bits neu zu setzen, was aber leider nicht glückte. ich denke ich kann ihn mal zu meinen ausschusssachen geben. danke für eure tipps. greetz dave
-
Thread
Wie perfekte ADC Werte 16Bit
Hallo, wie ist das optimale Design für 16 Bit z.B an einem STM32 Wenn ich die Versorgungsspannung mit einem Schaltregler realisiere und dahinter eine hochstabile Referenz. Was ist mit VDDref? Geht man dort einfach mit der hochgenauen Referenz
Hallo, 16 Bit ist noch nicht so kritisch. Wenn man von 3,0V Messbereich ausgeht dann haben wir 3,0V / 65536 = ca. 46 µV je Bit und eine Dynamik von 96 dB. Jetzt mußt Du nur Wissen wie hoch der PSSR Deines ADC ist
-
Thread
Security/Lock Bits Zurücksetzen?
Hast Du das mit dem Button "Clear All" gemacht? Ist davon auch das Bit "SPIEN" betroffen? MfG Andi
Hallo, mit HV-Programmierung kannst du die Fuse-Bits immer setzen oder wieder zurücksetzen egal wie sie gesetzt sind. Auch wenn du den Zugriff per SPI durch Löschen des SPIEN-Bits gesperrt hast. HV-Programmierung kann z.B das STK-500. MfG
-
Thread
Arduino oder
hilfreich sein: http://stefanfrings.de/mikrocontroller_buch/index.html Man kann auch direkt mit 32bit einsteigen. Die 32bit an sich sind nicht komplizierter, als 8bit Programmierung. Aber alle 32bit Mikrocontroller haben viel mehr Funktionen. Die Menge dieser Funktionen macht sie erheblich komplexer
> Man kann auch direkt mit 32bit einsteigen. Die 32bit an sich sind nicht > komplizierter, als 8bit Programmierung. Aber alle 32bit Mikrocontroller > haben viel mehr Funktionen. Die Menge dieser Funktionen macht sie > erheblich
-
Thread
MSP430 Bit schieben
rotieren. Du wirst RLC nehmen und das Carry zwischendurch löschen müssen. Oder vorher die oberen Bits auf 0 setzen. Oder nachher die unteren Bits. Oder du kannst es so machen: add.b R14,R14 add.b R14,R14 add.b R14,R14 add.b R14,R14
Ich weis zwar nicht on die CPU das kann. Aber bei 4 Bit würde ich eher ein Swap verwenden, Das tauscht die oberen gegen die unteren 4 Bit
-
Thread
200 LED Matrix mit nur 8 LEDs
Zum Zweiten vereinfacht sich die Farbdekodierung. Angenommen unser Pixel besteht aus 6 Bits in einem Byte die wir nutzen möchten. Von den 6 Bits jeweils 2 Bit pro Farbe -> RGB. Macht 64 Farben insgesamt. Nun machst du folgendes PORTD zb. benutzt 6 Pins. In zweiergruppen sind diese Pins
zusammengeschalteten PINS ist auf Ausgang der andere auf Eingang geschaltet. Wenn wir DDRD also so setzen das PD0, PD2, PD4 auf Ausgang ist und PD1,PD3,PD5 auf Eingang und wir ein Farbbyte auf PORTD ausgeben dann werden die Bits 0,2 und 4 am Ausgang anliegen. Also die Farbbits R0,G0,B0. Wenn wir DDRD so
-
Thread
Problem mit ADC Auto-Trigger interrupt
des Timer 0 zur PWM-Generierung: [c]void PWM_init(void) { // Form generation mode using WGM bits and Compare output mode using COM bits. Phase correct Mode 1 TCCR0A |= (1<<WGM00) | (1<<COM0A1) | (1<<COM0B1); // Set the Clock select bits to determine Clock frequency. Prescaler = 1 TCCR0B
nimmst du das TIFR0 0b01001110 und setzt alle Bits auf 0 bei denen hier 0b11001110 ein 1 Bit ist Was kommt raus? 0b00000000 Ähm.Da ist ein bischen mehr auf 0 gegangen. Nicht nur Bit 7. Das sind keine
-
Thread
Interrupts vs. Endlosschleife
ADC-Interrupt: Messwerte einlesen und sichern, nächste Messquelle einschalten, evtl. Jobflag setzen (wird vom ADC ausgelöst, wenn er fertig ist) - andere Interrupts (RX, Ext, Pinchange...): Daten sichern, falls erforderlich, Jobflag für Mainloop setzen, dadurch ISR sehr kurz halten
die Befehle zur SREG-Manipulation. Man kann einunddasselbe Ding unterschiedlich nennen. ;-) Die Bits im Register "flags" müssen ja nicht nur ausgewertet werden, sondern auch gesetzt und gelöscht. Das Setzen geschieht meinst in einer ISR, da muss es schnell gehen, deshalb bevorzuge ich obere Register
-
Thread
Avr-gcc Bitshift 32bit Variable geht nicht
Bytes 16-31 kann ich nicht setzen. Es steht am Ende 0x00005555 in der Variable. Wenn ich für jede ungerade Zahl das 9. bit setzen will, wird mit dem 15. bit auch bits 16-31 gesetzt. Ergebnis: 0xffffaaaa. Es scheint so, als könnte
Philipp schrieb im Beitrag #3601206: > Also Bytes 16-31 kann ich nicht setzen in C wird alles mit int gerechnet. Und wie groß ist int auf dem avr? (16Bit) 1l<<fifo->w_ptr sollte es beheben.
-
Thread
stm32f103 RTC Interrupt öfter als erwartet
); // Wait until RTC is synchronized while(!READ_BIT(RTC->CRL, RTC_CRL_RSF)) {} // Wait until last write operation is done while(!READ_BIT(RTC->CRL, RTC_CRL_RTOFF)) {} // Enable second interrupt SET_BIT(RTC->CRH,RTC_CRH_SECIE);
{ // Toggle LED GPIOA->ODR ^= GPIO_ODR_ODR5; // Clear interrupt flag CLEAR_BIT(RTC->CRL,RTC_CRL_SECF); // Delay a little asm volatile ("NOP; NOP;"); } [/c] Apollo M. schrieb im Beitrag #5758480: > ich würde sogar eher ein isb() cmd setzen anstatt dsb/dsm?! >
-
Thread
MCP23017 - gemischter Betrieb von LEDs und Taster
mit Pseudocode> lese den Zustand über I2C des Registers des MCP23017 zurück verknüpfe mit der neuen Bit-Maske und schreibe das Register wieder in den MCP23017. a) setzen von Bits : neuer-Zustand = alter-Zustand OR Bit-Maske b) löschen von Bits: neuer-Zustand = alter-Zustand AND not(Bit-Maske)
können. Einfacher geht das mit einem PCF8574. Die LEDs gegen VDD und die Taster gegen GND. Die LED-Bits nach Wahl invertiert (0 leuchtet) ansteuern,die Tasterbits auf 1 setzen. Beim Lesen sind die gedrückten Taster auf 0.
-
Thread
ENC28J60 - sendet nichts
Was heißt richtigen SPI-Modus? Aufgrund der Verdrahtung nutze ich das Hardwaremodul nicht sondern setze Daten und Takt manuell (in Software halt). Ich lege mein Bit an und lese das vom Chip aus, danach takte ich einmal. Wenn die SPI-Funktion nicht funkionieren würde würde ja jede Kommunikation mit dem
heißt richtigen SPI-Modus? Aufgrund der Verdrahtung nutze ich das > Hardwaremodul nicht sondern setze Daten und Takt manuell (in Software > halt). > Ich lege mein Bit an und lese das vom Chip aus, danach takte ich einmal. Wenn du das genau so machst, dann ist das definitiv falsch! Das Bit vom
-
Thread
Eigener Bootloader stm32f103
erst "hinter" dem Bootloader. Beim Umschalten von Bootloader auf Hauptanwendung muss man das VTOR setzen.
Applikation rein zu springen. Stimmt, man könnte auch in den Option-Bytes permanent nSWBOOT0=0 setzen, und dann für den Bootloader-Start auch nBOOT0=0 setzen und einen Software-Reset auslösen. Dann muss man allerdings im STM32CubeProgrammer nach dem Update wieder nBOOT0=1 setzen um die Anwendung wieder