-
Thread
8bit Pointer bei großen AVR's
Nein. Das Flash-ROM ist es. Dessen Adressierung ist je nach Art der Verwendung in 16-Bit Worten (als Code) oder in 8-Bit Bytes (als Daten). > so dass man mit einem char maximal 16*256, also 4k Speicher, > adressieren kann. Nein. Ausserdem fehlt die Einheit. In Bits wäre immerhin
. Das RAM ist 8 Bit breit. Das Flash hat 16 Bit. mfg.
-
Thread
Leuchtdiode blinken
Hallo, du hast vergessen TMRON zu setzen.
auf Null setzen else PORTB |= (1<<PB2); //sonst PB2 auf Eins setzen schreiben könnte? Leider funktioniert das Blinken im 12s Takt immer noch nicht.
-
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
Problem mit Sprungadressen und Timer
Aktion anfängt. Welche Aktionen sind das. Da ist zum ersten die Aktion: Pin PA0 auf 1 setzen UNd zum zweiten ist die andere Aktion: Pin PA1 auf 0 setzen Und dafür setzt du jetzt die kanonischen Lösungen ein. Einen Pin auf 1 setzen macht man mit port |= ( 1 << Pin ) und einen
mittels [C] PORTA |= (1 << PORTA0); PORTA &= ~(1 << PORTA1); [/C] immer nur das eine Bit ansprichst, das du auf 0 oder 1 setzen willst. Es ist wirklich ganz einfach. Durch die letzte Form ist gewährleistet, dass die anderen Bits an diesem Port nicht verändert werden.
-
Thread
attiny2313, LCD, 4-Bit, C, Einzelne Zeichen falsch
Versuche es mal mit c='0' statt c=0 in der ersten Zeile. Und dann vielleicht ein delay zwischen dem Setzen des cursors und der Ausgabe.
Enable-Puls static void lcd_enable( void ) { LCD_PORT |= (1<<LCD_EN); // Enable auf 1 setzen _delay_us( LCD_ENABLE_US ); // kurze Pause LCD_PORT &= ~(1<<LCD_EN); // Enable auf 0 setzen _delay_us( LCD_ENABLE_US ); // kurze Pause } [/c]
-
Thread
8 RGB Leds stufenlos ansteuern
versorget: [c] ISR(SIG_OVERFLOW0) // Alle 16 Mikrosekunden { if (sendclk < 288) // Wenn noch Bits zu senden sind { if ((PORTA&(1<<CLOCK)) || sendclk == 0) // Beim ersten Bit oder wenn Bit neu gesetzt werden soll { PORTA &= ~(1<<CLOCK); // Setze Clock Low um neues Bit zu setzen
; // Setze Clock High um aktuelles Bit zu übernehmen } } else // Wenn alle Bits gesendet wurden { sendclk++; if (sendclk == 289) PORTA |= (1<<CLOCK); // Setze Clock High um letzes
-
Thread
'var' may be uninitialized
würde der Startup-Code ja auch nicht tun, um irgendwelche Gleitkommavariablen im BSS auf 0.0 zu setzen.
geinlined wird, anstatt die Lib aufzurufen. Daß int64 länger braucht, liegt daran, daß es auch 64Bit rechnen muß und nicht nur 24Bit.
-
Thread
RTC DS3231 - Temperatur Daten?
ein "Selbstläufer" ist... halt alle 64 Sekunden ein Update. Jetzt habe ich natürlich mal ein setzen des CONV Bit im Control Register vorangestellt, das Erbenis ist leider das gleiche. :-(
if ((readIIC() & 0x00ff) & (1<<BSY)) // auf busy pruefen mit 0x00ff unddieren weil Arduino 16 Bit liest aber nur 8 Bit kommen. i2c_test_flags|=(1<<I2C_RTC_TEMP_BSY); // Flag busy setzen else i2c_test_flags&=~(1<<I2C_RTC_TEMP_BSY); // Flag busy loeschen
-
Thread
Zwei gleiche Codeschnipsel = volkommen verschiedene Ergebnisse
drehrichtung identisch aber direktion bit falsch / direction bit setzen setbit(ho_status,1); if(TCNT3 < OCR3B && checkbit(PINA,PA4) && checkbit(ho_status,1))// wenn Drehrichtung anders herum und direktion bit gesetzt / direction Bit
drehrichtung identisch aber direktion bit falsch / direction bit setzen setbit(az_status,1); if(TCNT1 < OCR1B && checkbit(PINA,PA3) && checkbit(az_status,1))// wenn Drehrichtung anders herum und direktion bit gesetzt / direction Bit
-
Thread
sehr schnell sehr viele LEDs ansteuern
Jetzt nochmal genau nachgerechnet: 128 x 64 Pixel x 3 Farben x 4 Bit je Farbe / 8 Bit pro Byte x 66000 Bilder pro Sekunde = ~800MB/Sekunde Mit welchem Bild-Material soll das Display gefüttert werden? Muss es dann noch Verarbeitet werden? (Z.B. einblenden von Zahlen
sagt da was anderes, nämlich 8,16 GBit/s für HDMI 1.3. Schon normales HD1080p/60 Hz braucht 60Hz*8bit*3*1920*1080 = 2.985.984.000bit/s und das ohne Sync-Lücken. Die Karten müssen das können, da sie ja entsprechende Monitore ansteuern. Gruß Stefan
-
Thread
AVR - if/while werden übersprungen
lcd_gotoxy(0,0); lcd_puts("Monat Einer*****"); lcd_gotoxy(y1,1); lcd_putc(y2+0x30); while (bit_is_set(PIND, PD3)); while (bit_is_clear(PIND, PD3)) for (mon1=0;mon1<10 && bit_is_clear(PIND, PD3);) { y2=mon1+0x30; lcd_gotoxy(y1,1); lcd_putc(y2); _delay_ms(350);
Ausnahme > mit einer Ausnahme von der Ausnahme :D Lass mich gerne eines besseren > belehren. Setz doch mal das Jahr 2012 - nachdem die Jahreszahl von 8 auf 16bit erweitert wurde - ein, das ja zweifelsfrei ein Schaltjahr war: 2012%400 = 12 --> Bedingung gibt 0 zurück und damit wird der ganze Ausdruck
-
Thread
PWM für Modellservos
ich die gescannten Impulse nicht, die Servos haben sicher nix dagegen, wenn ein AVR "mithört"... Bit- & Bytebruch... ...HanneS...
später noch mal mit Tiny26 machen, dann incl. Servoelektronik und Programmiertaste (Trimmung). Bit- & Bytebruch... ...HanneS...
-
Thread
STM32 Sleepmode 24h, LSI und HSI zu ungenau
generiert), > das läuft durch einen Prescaler von 24000 (=23999), also 1000 Pulse pro > Sekunde, dann setze ich den Timer-Reload auf 999, somit habe ich einen > Timer-Interrupt pro Sekunde. Mach es noch simpler: Lass die PLL weg, die kostet nur Strom. Nimm als Timer den SYSTICK, der hat 24 Bit, damit
ich mit dem TIM16 auch, indem ich den Reload-Wert nicht auf 999 sondern > z.B. auf 998 oder 1000 setze. Der Fehler des HSI ist noch der gleiche. Der Unterschied ist, wie fein du den Fehler ausgleichen kannst. Mit dem TIM16 ist die kleinste Stufe 1/1000, ±86.4 Sekunden/Tag. Mit den 24 Bit vom SYSTICK
-
Thread
warteschleife 8-Bit-Microkontroller
hallo leute. wie programmiert man eine warteschleife, die 300 Impulse lang wartet, für einen 8-Bit-Microkontroller (assembler)?
hallo leute. wie programmiert man eine warteschleife, die 300 Impulse > lang wartet, für einen 8-Bit-Microkontroller (assembler)? Ich kann kein Assembler, aber das dürfte genau so funktionieren wie in jeder anderen Programmiersprache auch: - einen Zähler deklarieren und auf 0 setzen - in einer
-
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
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
Testaufgabe für Experten
10V übertragen (gegebenenfalls Spannungsteiler vor dem ADC). 0V = 0 10V = 1 AD1 ------> ADC1 --> Bit 0 AD2 ------> ADC2 --> Bit 1 AD3 ------> ADC3 --> Bit 2
0 bis +12Volt Ausgang 5 Analog 0 bis +12Volt Ausgang 6 Analog 0 bis +12Volt Ausgang 7 Digital 1 Bit +12Volt Schweißstromquelle: Eingang 1 Digital 1 Bit +12Volt Eingang 2 Digital 1 Bit +12Volt Eingang 3 Digital 1 Bit +12Volt Eingang 4 Digital 1 Bit +12Volt Eingang 5 Digital 1 Bit +12Volt Eingang
-
Thread
FuseBit Reseter
Hi, habe aus der Not eine Tugend gemacht und mir aus nem ATMEGA8 und ein paar Bauteilen nen Fuse Bit Reseter für ATTINY 11/12 und 15 gemacht. Nun frage ich mich ob ich dieses Projekt weiterführen soll, also auf andere Controller erweitern. Wer hätte den Interesse an so einem Aufbau (ca. 20 EURO)
reingesetzt hast. Dann habe ich noch ein wenig im Programm des 90S1200 des STK500 gewerkelt, damit das setzen der fuse-bits beim Softwareupdate des 8535 unterbleibt (die mach(t)en das tatsächlich automatisch, möchte mal wissen, was das bedeuten soll).
-
Thread
Welcher Controller für Unterrichtszwecke?
Marx schrieb im Beitrag #7800356: > für die erste Vorlesung einen 8 biter wählen > Dann sollte man aber ganz schnell 32 bit nehmen Ich verstehe nicht, was an der Anzahl der Bits so wichtig sein soll. Wenn ich 8 Bit Rechner verstehe, dann verstehe ich auch jede andere Anzahl von Bits. Viele Berechnungen sind (für den Menschen) mit 32 Bit sogar deutlich einfacher, als sie in mehrere 8 Bit Operationen zerlegen zu müssen. Ich denke, es geht um die im 32 Bit Umfeld üblicherweise
-
Thread
Bit an GPIO (AVR) präzise getimed ausgeben
[c] ISR(TIMER1_OVF_vect) { if(theBit){ PORTD |= 0b01000000 ; } else { PORTD &= 0b10111111 ; } } [/c] Ich möchte ein Bit ausgeben, und zwar in präzisen Zeitabständen. Wenn ich das so mache, wie oben, jittert das Bit zum einen weil
Die Bits, die jitterfrei auszugeben sind, sind quasi zufällig.
-
Thread
Echo UART-Schnittstelle
Julian S. schrieb im Beitrag #4775472: > Ich weiß allesdings nicht wieso ich dieses > Bit zu Beginn setzen muss. Dieses Bit ist Read-Only. Das kannst du gar nicht setzen. > Dies wird auch nicht beim Beispiel im Datenblatt gemacht. Wozu auch. S.o. > Habe zufällig diese Zeile im Internet
mit dem entsprechen Wert direkt beschrieben habe. Ohne Erfolg. Das ich durch die letzte Zeile das Bit U2X0 auf Null setze stimmt, trotzdem finde ich es komisch, da dieses ohnehin mit dem Wert 0 initialisiert wird. Das ich das UDRE0 gar nicht beschrieben kann, habe ich übersehen. Da habe ich einen
-
Thread
AD Konverter beim Mega 8
nachvollziehen. Eine Unklarheit hab ich noch. Ergebnis Multipl. High-Byte 0000 0000 0000 1111 (15) [16 Bit!] Ergebnis Multipl. Low-Byte 0000 0100 1111 1011 (1275) [16 Bit!] Es entsteht bei der Multiplikation von 255 mit 4 ein 16 Bit Ergebnis. Wie setze ich das denn um? Müsste ich dann das high und
jochen wrote: > Es entsteht bei der Multiplikation von 255 mit 4 ein 16 Bit Ergebnis. > Wie setze ich das denn um? Müsste ich dann das high und Low bye jeweils > wieder in ein High und Low byte unterteilen? Das ist ja bereits der Fall. Wie weiter oben schon erwähnt, legen
-
Thread
PIC ICD 2 selbstgebaut
Hallo Sind die Config-Bits für den Oszillator richtig gesetzt? Programmieren geht, aber debuggen nicht ohne.
GND liegt eine Spannung von ca. 11.5 V Ich hab keine Ahnung wo C3 ist. > Was sind "config bits"? Stark vereinfacht sind das ein paar Bits um den Controller einzustellen. Zum Beispiel kann man damit zwischen Internem Oszillator und Quarz wählen.
-
Thread
zwei Versionen Eine geht, die andere nicht AT91SAM7S256
Also so wie ich das sehe, schiebt die Compiler-Version das zu prüfende Bit an bit31. Das sollte doch eigentlich das Bit für positiv- / negativ Zahlen sein, oder? Wieso zieht aber dann BMI nicht?
Doch. Aber ich setze vorher das Sign-Bit. Du nicht. Tip: Die CMP-Befehle sind die einzigen ALU-Befehle, die immer die Statusbits setzen. Bei den übrigen ALU-Befehlen muss man das extra sagen.
-
Thread
[AVR|C] Codeschloss Projekt - wie den Code verbessern
Register selbst - ändert. Hier nochmal get_toogle: [c] int get_toggle(const volatile int *PINX, int BIT){ int i; if(*PINX & (1<<BIT)){ while(*PINX & (1<<BIT)){ // wait mainwork(); } for(i=0;i<=255;i++){ // zeit zum entprellen mainwork(); } return 1; }
Deine Pinverwendung für Ein- und Ausgänge stimmt nicht mit dem Kommentar überein. Und beim Richtung setzen auch nicht. Peter
-
Thread
Frage: 328p und Timer2/GPIO in assembler
mit dem Kehrwert des zu löschenden Bits verUNDen sts dummy, TCCR2A ; und wieder ins Register schreiben. ; zum gezielten Setzen im Register, ohne den restlichen Inhalt zu zermanschen lds dummy, TCCR2A ; derzeitigen Inhalt des
sollte, wie der Pin vorher stand :-) Naja, es ging ja explizit ums Toggeln. Wenn man ein einzelnes Bit direkt setzen oder löschen will, nimmt man halt 'SBI PORTx, b' bzw. 'CBI PORTx, b', damit geht es auch in einem Takt.
-
Thread
C# werte über serielle schnittstelle an Atmega8 AVR
das /4 soll den eingegebenen Wert von ml in Bits umwandeln, da ich laut Auflösung 4ml jeh Bit genauigkeit habe... soll also nicht übertragen werden
Tobias Giesen schrieb im Beitrag #3021545: > das /4 soll den eingegebenen Wert von ml in Bits umwandeln, da ich laut > Auflösung 4ml jeh Bit genauigkeit habe... soll also nicht übertragen > werden Ja, hatte mich da auch vertan integer werden automatisch in decimal umgewandelt. Das Problem
-
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
Setzen des GIE-Bits nach EEPROM Schreibvorgang (PIC18F4550)
obengenannte Zeile streiche, funktioniert alles einwandfrei. Es kommt für mich aber nicht in Frage, das Setzen des Bits dem USB-Framework zu überlassen. Fällt euch etwas auf, das falsch ist / sein könnte ? Grüsse Toubi
dem Steckbrett und benutze die Interrupt-on Change PINs an PB4 u.5. Wenn ich vor der ISR das GIEH bit setze, verschwindet es während des Interrupts und wird nicht wieder gesetzt. Ich muß es in der main loop permanent setzen. Ich kenne dieses Phänomen vom alten 452 nicht. Auch n Ding.
-
Thread
Rs485 reagiert nicht auf Daten
PE1 setze ich auf High-Pegel, jop.
Aha, da haben wir es doch. für 9600Baud bei f_CPU=2MHz musst du das CLK2X Bit im Register USARTE0.CTRLB auf 1 setzen Außerdem hast du den BSCALE Faktor von 4 komplett unterschlagen. Dieser wird in BAUSCTRLA und B eingetragen.
-
Thread
Welche Programmiersprachen benutzt ihr ?
einen > kryptischen Bandwurm deswegen hinschreiben. Nee. in c ganz einfach: a |= 0x40; // setzt bit 6 b &= ~0x02; // löscht bit 1 jeder mittelmässige c-compiler setzt das direkt in die entsprechenden bit-setz/clear befehle um :-)
Es gibt 2 Ansätze bits zu setzen a |= 0x40; // setzt bit 6 a |= 1 << 6; // setzt bit 6 Wobei der zweite Weg eine Namensgebung erlaubt. a |= 1 << TxEn; // setzt bit 6 Wobei man natuerlich wissen muss, dass
-
Thread
Soft-PWM nie völlig High
drin. An der Hardware liegt es nicht. Das manuelle Setzen auf High- oder Low-Pegel klappt und auch eine einfachere Software PWM funktioniert ohne diesen Fehler. Da ich zum einen diese Software auf 16 Kanäle und 10 Bit erweitern wollte, bin ich schon auf eine
halten kann kriegt man den Treiber nie abgeschaltet. Klar jetzt könnte man noch einen inverter davor setzen, aber Softwarelösungen sind billiger. Zurück zum Thema. Die Software bietet 256 Stufen für die PWM an. Das ist eine 8-Bit Zahl. 0 ist alles aus 255 sollte alles an sein. Sind genau 256 Schritte
-
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
16 Bit SPI senden
gesendet lower_byte = (uint8_t) (value>>4); // Merke dir niederwertiges Byte (Die höchsten 12 Bit werden versendet) SPDR = 0b01110000|(value>>12); // Setze Controlbits '0111', verschiebe die 4 höchsten Bits an die richtige Stelle und starte SPI senden } } [/c] Wäre sehr
gesendet lower_byte = (uint8_t) (value>>4); // Merke dir niederwertiges Byte (Die höchsten 12 Bit werden versendet) SPDR = 0b01110000|(value>>12); // Setze Controlbits '0111', verschiebe die 4 höchsten Bits an die richtige Stelle und starte SPI senden } } [/c]
-
Thread
put Pixel für dotmatrix Display
nicht ganz wie ich den Displayspeicher auslesen soll, obwohl mir die Idee schon klar ist. Überprüfe 16Bit und merke wie die nicht zu setzenden 12 Bit belegt waren. Schreibe diese 12 Bit wieder und manipuliere nur die neu zu setzenden 4 Bit? Eine andere Idee wäre immer 3 Byte, also 24 Bit oder 6 Pixel
> ich den Displayspeicher auslesen soll, obwohl mir die Idee schon klar > ist. > Überprüfe 16Bit und merke wie die nicht zu setzenden 12 Bit belegt > waren. Schreibe diese 12 Bit wieder und manipuliere nur die neu zu > setzenden 4 Bit? > > Eine andere Idee wäre immer 3 Byte, also 24 Bit
-
Thread
Checkliste: Ausrüstung für ATiny Programmierung
Thilo schrieb im Beitrag #2626207: > Mir ist die Ausgabe nicht ganz schlüssig. Da fehlt das Setzen. Ist dein > Code korrekt? Soweit ich mich an den C-Syntax erinnere, müsste PORTB|= (1<<PORTB3); gleichbedeutend sein mit PORTB= PORTB | (1<<PORTB3); Folglich wird Bit 3 im Register
also das Setzen des Bits, einfach wegoptimiert. Schlauer Compiler. :-)
-
Thread
Bringt ein STM32 mehr?
schrieb im Beitrag #1666335: > Wer sagt, dass ich 0.02%-Widerstände nehme? Das sagt Deine Angabe: 12Bit. 2^12 = 4096 1/4096 = 0,0244% Bei schlechter als 0,02% sind Deine 12Bit nur ne Lüge. Peter
darueber im klaren sein welchen Wertebereich deine Variablen annehmen koennen. Ich hab das alles mit 16Bit Variablen gemacht die teilweise unterschiedlich skaliert waren. An dem Punkt ist natuerlich ein 16Bit oder ein 32Bit Controller einem 8Bit Controller ueberlegen. Ein weiterer Punkt ist natuerlich das
-
Thread
Hilfe bei bitweiser Manipulation einer Variable
Um die unteren vier Bits auf einen komplett neuen Wert zu setzen, musst Du in zwei Schritten vorgehen: Erst die Bits löschen a &= 0xFFF0; dann die Bits auf den neuen Wert setzen: a |= neue_bits; Um sicherzustellen
Digit der Eingangsvariable, die die Operation, die du ausführen willst, vollständig notieren: 1. Bit auf 0 setzen 2. Bit auf 1 setzen 3. Bit lassen wie es ist Das ist _trinär_ , lässt sich also nicht in einer Binärzahl gleicher Stellenanzahl ausdrücken. Weil eh 2 Bits verwendet werden, bleibt
-
Thread
16bit seriell in 16bit Variable auslesen
Das funktioniert schon vorher nur deshalb, weil es Bit 7 vom Port ist. Dein Schema würde bei 16 Bits nur mit Bit 15 vom Port funktionieren.
if(PIND & (1<<CPLD_nSerDATA)) { u16Result |= 1; //Wenn 1 ankommt, Bit0 in Result auf 1 setzen } }
-
Thread
Würde gerne Assembler in C umschreiben, aber ich blick's net
LOOP1 ; 2 => 9 cycles [/avrasm] Was ich schon rausgefunden habe: - Der Zähler ist eine 24bit Variable über die Register R28-R30, wobei R30 bereits Teil des Z-Pointers ist. - R24-R26 enthält wohl die Schrittweite (auch als 24bit Variable) - lpm - lädt den Wert aus einer Tabelle in das
nähere mich so dem Original (aba nur da wo es nötig is). > Das T-Flag könnte man auch anders setzen: Hm, das scheint mir ein sehr interessantes Verfahren zu sein. Muss ich aber erst etwas setzen lassen (geistiger Wiederkäuer :D ). Wird das T-Flag beim ISR-pro- und -Epilog berücksichtigt?
-
Thread
letzten 5 bit abschneide
ja, ich möchte sozusagen aus einer 32bit zahl eine 27bit zahl machen. Ich lese aus einem ADC eine 24bit zahl in eine 32bit variable(int32_t) und möchte die letzten "schwankenden" 5 bits "wegschneiden" also das er nicht mehr schwankt
Der Peter schrieb im Beitrag #2667717: > ja, ich möchte sozusagen aus einer 32bit zahl eine 27bit zahl machen. > Ich lese aus einem ADC eine 24bit zahl in eine 32bit variable(int32_t) > und möchte die letzten "schwankenden" 5 bits "wegschneiden" also das er > nicht mehr schwankt
-
Thread
Drehgeber auf Atmega 88 wandeln
soll. Mit dem gehts auch. Nur laut Handbuch hat das TCCR1A-Register keine Möglichkeit das WGM12 - Bit zu setzen, welches ja laut Tabelle 15-4 erfordelich ist um CTC zu setzen. Deswegen bin ich auf das TCCR1B gegangen. Hier kann ich das Register auf CTC setzen, sowie auch den erfordelichen Teiler (64
gehts auch. Gut > Nur laut Handbuch hat das > TCCR1A-Register keine Möglichkeit das WGM12 - Bit zu setzen, richtig > welches ja > laut Tabelle 15-4 erfordelich ist um CTC zu setzen. Das Bit ist im TCCR1B Register > Deswegen bin ich auf > das TCCR1B gegangen. Hier kann ich das Register
-
Thread
Bitmanipulation zu langsam?
: > Danke! das mit der Klammer hat funktioniert. Kann man auch gleichzeitig > mit einem Befehl setzen und löschen Jo, is zwar nicht ganz schön: port |= ((1 << bit0) | (0 << bit1)); Gruß Robert
bits setzen und löschen? Nun nochmal zu meinen Bitmuster. Ich benutze einen unipolaren Schrittmotor mit 6 Kabeln dran! Wie bereits erwähnt funktioniert er super mit dem Bitmuster 0001,0010,0100,1000.
-
Thread
Was kommt nach Atmega?
ist es. Geht ja schon mit ST32F1xx und LPC17xx los: Beim STM32 sind viele Register trotzdem nur 16 bit breit und haben dann wieder dieses tolle high- und low-register, obwohl man das wohl schön in 32 bit hätte abbilden können. Andererseits haben die STM32 dann wieder ein CRC-Register drin, die LPC
Für die Initialisierung ja, wenn man sich nicht all zu sehr um die vielen Bits kümmern will. Um jetzt ein PortPin zu setzen geht es mit der direkten Registerdeklaration einfacher und effizienter.
-
Thread
Globale Variable im Interrupt u. Daten an PORT ausgeben?
noch mal genau nachlesen ob der AT90CAN128 die Interrupts > abschaltet oder nicht. /Alle/ AVRs setzen beim Sprung in den Interrupt-Vektor das I-Bit im Statusregister zurück und setzen es beim Rücksprung ins Hauptprogramm wieder!
Timerinitialisierung gab, die nicht so funktioniert hat wie gewünscht, war deine vielgepriesene Syntax mit Bit-Setzen über Hexzahlen (oder noch schlimmer: Dezimalzahlen) im Spiel. Mal wurde ein Vorteilerbit vergessen, mal das falsche Bit gesetzt und der falsche Interrupt ausgelöst, etc. > und zweitens, sprichst
-
Thread
Timer 1 OC1A Pin taktet nicht (ATtiny841)
Hallo, nochmal. Eigentlich steht im Tabellenkopf TOCCnSxx. xx steht für ... Bit1 Bit0 Jetzt lese ich in der Spalte für OC1A oben "01". Heißt für mich Bit 0 muß auf 1 gesetzt werden. Ist aber falsch, dann taktet nichts. Setze ich alles auf 0 taktet es wie gewünscht. Kommt
ich in der Spalte für OC1A oben "01". Genau. Du musst also TOCC5S1:TOCC5S0 in TOCPMSA1 auf 01 setzen. Beachte: das sind nicht Bit 0 und 1 in diesem Register, sondern die Bits 3 und 2!!! Zusätzlich musst du auch noch TOCC5OE in TOCPMCOE setzen. Also kommen für das Mapping folgende Anweisungen raus
-
Thread
ext. Flash-ROM in C beschreiben
*((short*)0xC002AA)=0x55; *((short*)0xC00555)=0xA0; *((short*)0xC0F000)=150; [/c] ich setze dann einen breakpoint und lese danach 0xC0F000 aus. Die Adresse enthält allerdings nicht den Wert 150 sondern 32. Die Flash-Adressen sind tatsächlich 16 Bit breit. Zu der Umsetzung konnte mir der
wäre sie mit 0x0000 nach dem Sektor Erase bereits beschrieben. Es ist nicht möglich im Flash wieder Bits zu setzen; es kann nur von 1 auf 0 gewechselt werden (Daher das "Füllen" mit 0xFFFF beim Erase). Die Adresse kann also keine Flash-Adresse sein. Korreliert der Wert 0x0004 mit der Anzahl der geschriebenen
-
Thread
ADC und PWM am ATtiny84
auch da sind Veroderungen nötig (aus http://www.roboternetz.de/community/threads/45591-Wie-Mehrere-Bits-in-Register-setzen): Gicr = Gicr Or Bits(int1) -> Setzt Bit7 in Register GICR Bascom macht daraus: IN R16,0x3B In from I/O location PUSH R16 Push register on stack
<< ADEN); ergebnis /= 3; return ergebnis; } void pwm_init(){ //Ausgänge setzen DDRA |= (1 << PA6) | (1 << PA7) | (1 << PA5); DDRB |= (1 << PB2); //Timer 0 (8 Bit) //Löschen von Bits: OC0A/OC0B Bit 7 + 6 //Art der Wellenform erzeugung: PWM, Phase Correct
-
Thread
Signal initialisieren
Zukunft öfter Thema sein wird. Wie mache ich das: ein Signal mit Nullen initialisieren und nur ein bit setzen? Gingen auch 2 Bit?
das geht dann "natürlich" trotzdem nicht.... > ein Signal mit Nullen initialisieren und nur ein bit setzen? Probier mal das hier: ... := ((NO_COLUMNS-1)=>'1',others=>'0'); > Gingen auch 2 Bit? Ja. Probiers aus... ;-) Als letzte Zuweisung muß das nur ... ,others=>'0'); kommen
-
Thread
P1 an einem C535 als Aus und Eingang nutzen
Vermutlich meinst du mit "Byteweise", dass du 4 Bits auf einmal lesen/schreiben möchtest. Lesen: Wert = Port-lesen & benutzte-Bits also Geschwindigkeit = Port1 & 0x0f Schreiben: Ausgabe-Bits passend schieben, was Eingang sein soll auf 1 setzen,
Bits müssen in der Variablen i natürlich auch in den oberen 4 Bits stehen, oder man schiebt den Wert vorher um 4 Bits nach links.