-
Thread
Portpin setzen bwz. löschen in C
Programm und denke nach was ich falsch mache. Ich möchte z.B.: Pin 2 vom Port 1 definiert auf High setzen und umgedreht. Das Bit habe ich vorher mit sbit LED = P1^2 deklariert. Jetzt will ich in Abhängigkeit einer Auswertung den Wert ändern und zwar so in dieser Art: if ( switch = 0) { LED = 1;
-
Thread
Zwei Prozesse nutzen einen Vektor. Geht das so?
(RESET = '1') then -- ... clear (others => '1') setzt alle Ausgaben auf '1', mit dem Setzen ... t_cnt1 <= (others => '1'); -- ... der 24 Bit Zahl auf '1' und dem Setzen des hochwertigsten Bits ... t_cnt1(23) <= '0'; -- ... auf '0'gehe ich in die Mitte des 24 Bit
PORTB |= (1 << 4); // set bit 4 in PORTB - Reset the CPLD1 _delay_ms(1); PORTB &= ~(1 << 4); // clear bit 4 in PORTB } else { // CPLD2 // Clear the GET-signal bits on Port B PORTB &= ~(1 << 5
-
Thread
8bit fast PWM beenden
Reinhard Schopf schrieb im Beitrag #2026240: > ...muß ich doch nur Bits des Timer1 so zurücksetzten > oder ? > > TCCR1A = ~(1<<COM1A1) | ~(1<<COM1B1); Ne, mit der Methode würdest du _alle_ Bits setzen, eher so: TCCR1A &= ~((1<<COM1A1) | (1<<COM1B1));
Ziegenpeter schrieb im Beitrag #2026277: > Ne, mit der Methode würdest du alle Bits setzen, eher so: > > TCCR1A &= ~((1<<COM1A1) | (1<<COM1B1)); aha...danke, ich programmiere in C noch ned lange. Habe bisher immer alles in Bascom gemacht. Irgendwie ist das hier schon verwirrend
-
Thread
ADS1115 und Verpolung
Andreas V. schrieb im Beitrag #6312361: > Das sind aber 15-Bit mit Vorzeichen und keine "echten" 16-Bit! Fuck! Käse! 15 Bit und Vorzeichen enstprechen einem Zahlenumfang von 16 Bit! Und das sind nun mal "echte" 16 Bit.
dem Chip sind die vier Kanäle und der Preis. Ich habe gerade versucht die Randbedingungen für 16-Bit herauszubekommen! Die meisten Leute verwenden nur 15 Bit. Ich fragte mich nur die ganze Zeit wie man das Maximale aus dem Chip herausholt. Einige Bibliotheken die ich bislang sah setzen teilweise falsche
-
Thread
Wie schnell ist euer uC
Nur zum Bleistift: ein AVR 8-bit benötigt fürn setz, lösch Befehl eines Portpins 2 Takte. ein AVR 8-bit XMEGA benötigt 1 Takt ein MSP430F149 benötigt meineswissens 6 Takte (jedoch nicht ganz sicher meinerseits) und deswegen
Gast wrote: > Nur zum Bleistift: > > ein AVR 8-bit benötigt fürn setz, lösch Befehl eines Portpins > 2 Takte. Vosichtig damit, die neuen AVRs können einen Port auch mit nur einem Befehl "toggeln", nämlich indem man ins PIN-Register schreibt.
-
Thread
DSO mit Funktionsgenerator statt Lüfter?
Geräten eher träge wirken, besonders bei XY-Darstellung und Langzeit-/Persistenzfunktionen. Die 8-Bit-Auflösung und die Budget-Hardware setzen Grenzen, weshalb feinere Details und schwierige Signalformen nicht so sauber wirken wie bei besser ausgestatteten Geräten. In Foren wird außerdem von
Da sind die 14 bit auch nicht besser als 12 bit. Ich benutze dafür einen klirrarmen digitalen Generator (24 bit), der das D.U.T. ansteuert, und dann von einem passiv aufgebauten Bandpass ausgewertet wird. Der Generator
-
Thread
LCD DEM16217
Initialisierung nötig sind und in welcher Reihenfolge diese abgearbeitet werden müssen. Ziel ist der 8-Bit Modus. Programmierkenntnisse in C sind vorhanden. Als Mikrocontroller setze ich den ATmega8515 ein. Vielen Dank für Euere Hilfe im Voraus, Christian :) P.s: Dies ist mein erste Versuch
, in der Funktion LCD_command eine entsprechende Umsortierung noch nachzurüsten. Das Löschen und Setzen von einzelnen Bits kannst du dir allerdings in deinem Code sparen, denn auch in deinem Code müssen alle 8 Datenpins an ein und demselben Port angeschlossen sein. D.h. wenn diese Annahme nicht mehr
-
Thread
Auslesen und setzen von Fuses per ftisp
Hi, ich setze mich gerade mal mit dem Programm ftisp auseinander. (http://hubbard.engr.scu.edu/avr/ftisp/) (Mein USBProg hat wegen eines Defektes einen neuen Mega32A bekommen und dieser braucht Firmware ;)
mich aus folgendem Grund nicht heran: ftisp liefert mir diesen Fuse Wert: "ftisp: Reading fuse bits => 0x289928" Zunächst verwirrt es mich, dass hier 3 Bytes zu sehen sind Zweitens sind die default-Fuses für den Atmega32A nach Datasheet 0x99E1 Hätte ich diese Werte in dem obigen wiedergefunden
-
Thread
ADC lässt sich mit cbi ADEN nicht ausschalten
Hi Der ATMega16 hat 5 Mux-Bits ->cbr r16, $1F > sbr r16, 0 ;Kanal 0 unnötig. Warum machst du zum Mux-Setzen nicht *ein* Unterprogramm. MfG Spess
entspricht: ori r16, 1<<3 Also wäre "sbr r16, 0" => "ori r16, 1". Damit würde man Kanal 1 setzen nicht 0.
-
Thread
Rechnen mit Assembler
macht man am besten mit fixed-point arithmetik. Dein Wertebereich ist 0,8..4V, d.h. Du brauchst zwei Bit um die Vorkommazahl darzustellen. Das wiederrum läßt 14-bit für die Kommastellen einer 16bit Zahl übrig. Die Auflösung ist damit 1/2^14. Also: 0,032 = 525/2^14 0,8 = 13107/2^14 Wenn Du
Und darauf achten, dass immer eine geradzahlige Anzahl Bytes in einer Zeile steht, da der Flash 16 Bit breit adressiert ist. Um darauf zuzugreifen, muss man zuerst den Z-Pointer auf den Anfang der Tabelle setzen. Da das Lesen byteweise erfolgt, muss der Pointer auf den doppelten Wert der Adresse gesetzt
-
Thread
RS232 allgemein
ready // -------------------------------------------------------------- // Basisadresse setzen LDR r0, =USART_BASE ready: LDR r1, [r0, #USART_US_CSR] AND r1, r1, #BIT1 CMP r1, #BIT1 BNE ready // Wert an Basisadresse + Offset schreiben ldr r8, =(0x6A & 0x1FF) // sollte
init_usart0: // -------------------------------------------------------------- // Basisadresse setzen LDR r0, =PIO_BASE // zu schreibender Wert LDR r1, =(BIT5 | BIT6 | BIT21 | BIT22) // Wert an Basisadresse + Offset schreiben STR r1, [r0, #PIO_PDR] // zu schreibender
-
Thread
C jedes zweite Bit verwerfen
Version wäre diese hier. [c] uint8_t tmp; for (i=0; i<4; i++) { tmp = __builtin_avr_insert_bits(0x7531FFFF, bindata[2*i], 0); netdata[i] = __builtin_avr_insert_bits(0xFFFF7531, bindata[2*i+1], tmp); } [/c]
> 3 Assemblerinstruktionen pro Bit. Und trivial ausrollbar. BLD/BST sind nur 2 pro Bit.
-
Thread
ISP MK II - Fehlermeldung
liegen. 1. Wurde der Controller schon programmiert? Dann könnte das Debug Wire enable Bit gesetzt sein. 2. Sind alle Anschlüsse 100% in Ordnung? Welche Farbe hat die LED des ISP? Leuchtet sie grün? ISP Frequenz mal auf 125kHz setzen.
Fuse einfach mal ausschalten oder auf 5V setzen.
-
Thread
Push Button Controller mit Speicherfunktion
Peter Dannegger schrieb im Beitrag #4165797: > Der ATtiny13 hat 512 Bit EEPROM mit 100.000 Schreibzyklen. D.h. man kann > ruhig jeden Wechsel als Bit 1->0 setzen speichern, dann hält er > garantiert 50 Mio Schaltzyklen durch. Richtig. Und falls man paranoid ist,
Peter Dannegger schrieb im Beitrag #4165797: > Der ATtiny13 hat 512 Bit EEPROM mit 100.000 Schreibzyklen. D.h. man kann > ruhig jeden Wechsel als Bit 1->0 setzen speichern, dann hält er > garantiert 50 Mio Schaltzyklen durch. Nein, es werden nicht bits, nicht mal
-
Thread
Bitmanipulation - Bit schreiben an variable Position ?
halber uint8_t-Variablen verwenden. Bis jetzt sieht das so aus, total unelegant: [c] void SetzeTemperatur(void) { if (aktuellesBit==1) { switch (Bitposition) { case 0: {Temperatur |= (1 << 0); break;} case 1: {Temperatur |= (1 << 1); break;} case 2: {Temperatur
allerdings aufpassen, dass die Hilfsvariable das richtige Format hat. Zum Beispiel nur für das Setzen: [c] unsigned char Hilfe=1; for(unsigned int i=1;i<Bitposition;i++) Hilfe<<1; Temperatur|=Hilfe; [/c] Allerdings wird mit der Lösung das erste Bit gesetzt, wenn Bitposition 0 oder 1 ist
-
Thread
Atmega16 100kHz Encodersignal
wird an deinem Programm liegen. Vermutlich. Ich hab das Programm jetzt komplett reduziert und setze stur den Port. 2,6 MHz... Irre, wieviel so wenig Befehle und ein paar optimierungsprobleme (16- statt 8bit Zugriff etc.) den Prozessor extrem verlangsamen o.O Selbst wenn ich alles bis ultimo
interessiert, so würde dein Problem in einer richtigen Sprache gelöst werden: [avrasm] .EQU ENC_A_BIT = 0 ;nur als Beispiele .EQU ENC_B_BIT = 1 .EQU ENC_PORT = PORTC .EQU ENC_A_MSK = 1<<ENC_A_BIT .EQU ENC_B_MSK = 1<<ENC_B_BIT .DEF ENC_STAT = R16 ;optional
-
Thread
Verstädnisproblem bezüglich des Carry Bits
std_logic_vector(ZW(WB - 1 downto 0))); end process ADD_SUB; end VECTOR_ADD; [/vhdl] Das setzen des Overflow Bits verstehe ich nur beim Carry Bit, sowohl bei der Addition als auch bei der Subtraktion ist mir ein Rätsel und ich hoffe ihr könnt mir da weiter helfen. Lg
, die in der Zeile TEMP := (ZW(WB-1), V2(WB-1), VI(WB-1)); zu einem 3-Bit-Wort zusammengefasst werden, ergibt sich eben ein entsprechender Wert für das Carry-Bit. > Das setzen des Overflow Bits verstehe ich nur beim Carry Bit, sowohl bei > der Addition als auch bei der
-
Thread
suche fertiger PID-regler
mit Int auch leicht bedient! Ausserdem würde ich für den I-Anteil eine Anti-Windup Maßnahme setzen!
aber nun zur Optimierung... Die Datentypen gefallen mir nicht wirklich... Ich hab doch nur einen 10bit AD-Wandler also zurück zu signed INT (16bit)
-
Thread
Steuerbare stufenlose Sinus-Spannungsquelle
sind dann schon 16 Bit gefragt. Gruß Dietrich
. Da > sind dann schon 16 Bit gefragt. Ja das ist klar. Die Auflösung sollte passen. Vielen Dank.
-
Thread
C - Ersatz von switch case.
5; case 5: return 4; default: return 0; } } //alternativ uint8_t arChannelBitNr[6] = {3,2,1,6,5,4} void latching_data(ChannelType channel, int data) { latch = data; uint8_t bitNr = Channel_2_PB_ODR_BitNr( channel ); //oder uint8_t bitNr = arChannelBitNr[channel]; //wenn sowieso nur ein Bit gleichzeitig gesetzt wird __BITS_PB_ODR = 1 << bitNr; shortwait(..) __BITS_PB_ODR = 0; //ansonsten __BITS_PB_ODR |= 1 << bitNr; shortwait(..) __BITS_PB_ODR &= ~(1 << bitNr);
-
Thread
if (uint16_t) --blink) == 0 Ok. if(--blink == 0 ) nicht ok?
vorstellen, dass der Compiler optimiert. Da nur 0..24 als Wert vorkommt, reicht es, diesen Wert als 8Bit zu speichern (AVR 8Bit Controller), dafür ist nur ein 8Bit-Register notwendig - im oberen Fall. Unten castest du explizit zu uint16_t, der Compiler gehorcht aufs Wort und belegt 16Bit.
vorstellen, dass der Compiler optimiert. > Da nur 0..24 als Wert vorkommt, reicht es, diesen Wert als 8Bit zu > speichern (AVR 8Bit Controller), dafür ist nur ein 8Bit-Register > notwendig - im oberen Fall. > Unten castest du explizit zu uint16_t, der Compiler gehorcht aufs Wort > und belegt 16Bit
-
Thread
STM32F4xx - Backup Ram verliert Inhalte
Christian J. schrieb im Beitrag #4370703: > BRE laesst sich erst setzen, wenn das EWUP Bit gesetzt wurde. Zufall > dass ich das rausgefunden habe. Warum sollte das so sein? Steht das irgendwo im Datenblatt?. Waere ja unpraktisch, wenn man den WKUP-Pin nicht braucht
braucht (oder PA0 fuer was > anderes braucht). k.A. Ist jedenfalls so, BRE lässt sich bei mir nur setzen, wenn vorher EWUP gesetzt worden ist. Tja... Sag mal, gibt es da ein Standardverfahren diese Bits zu setzen, außer den PeriphLib Funktionen?
-
Thread
12Bit ADC >= 20MSPS mit USB
Hallo! Für ein Messprojekt suche ich ein FPGA-Board welches 4096 Messwerte eines 12Bit parallelen ADC mit 20MSPS einliest, intern zwischenspeichert, von einem Referenzsignal subtrahiert und dann langsam über USB an den PC schickt. Hat jemand einen Hardwarevorschlag für mich? Wen es ein
der Spartan ja eh 3...5ns Pin-Verzögerung hat. Da kann ich das SLWR und SLRD mit der Lese-Flanke setzen, dann schaffe ich die Setup-Time. Naja, richtig optimal ist das nicht. das Packet-End ist auch so eine Geschichte, da muss ich mir nochmal Gedanken machen, wie das am besten zu bewerkstelligen ist.
-
Thread
Welchen Cube MX und IDE für den H7
ADC, up to 5 MSPS in 12-bit, up to 12 channels
bit möglich sind....
-
Thread
7-Segment Multiplexing mittels ATmega
brauchst. Was soll ich dir da jetzt gross für einen Tip geben? Du wirst ja doch wohl ein einzelnes Bit an einem Port auf 1 setzen können, wenn es 1 werden soll. Wenn beim Multiplexen die 7Segment Anzeige mit der Nummer 0 drann ist, dann eben den Punkt noch mit dazu einschalten [c] .... SEVEN_SEGMENT_PORT
Bit auf 1 setzen ist kein Problem. Nur wie teil ich ihm mit das er dieses Bit nur auf dem 1 Segment setzen soll wenn ich zb. eine Taste drücke.
-
Thread
Wie drehe ich eine Bitreihenfolge um??
habe ich einfach von oben übernommen. ich muss dann bitwidth auf 8 > setzen? Mwin größtes problem ist, das ich nicht weiß wie ich die > funktion in der main aufrufe. Kann mir das jemand sagen? So wie jede andere Funktion auch [C] ergebnis = bit_reverse( ausgangswert
Die Antwort die erwartete war: size_t bit_swap(size_t x, size_t bits) { return bits ? (x & 1) << (bits - 1) | bit_swap(x >> 1, bits - 1) : 0; } Darauf hätte ich geschrieben: Und wie sieht - bit_swap - aus? usw.
-
Thread
Mehrkanal Impulszähler PIC
ich das nicht umgesetzt kriegen. Ist ein nettes Thema und die Einarbeit lohnt sich... ;-) Ich setze solche Zähler bewusst niemals(!) zurück, denn solches Zurücksetzen bringt garantiert irgendwann Pulsverluste. Überläufe können bei einem 32-Bit-Zähler einfach in der Software abgefangen werden. Die
Lothar M. schrieb im Beitrag #6158276: > Ich setze solche Zähler bewusst niemals(!) zurück, denn solches > Zurücksetzen bringt garantiert irgendwann Pulsverluste. Überläufe können > bei einem 32-Bit-Zähler einfach in der Software abgefangen werden
-
Thread
UART-Interrupt Problem
<< MOTOR_RUNNING ); // Bit setzen break; .... } .... int main() { .... while( 1 ) { if( Control & ( 1 << MOTOR_RUNNING ) ) { ... } } } [/C] Ganz normale Bit-Setz, Bit-Lösch und Bit-Abfrage Operationen, wie sie in jedem Programm zu Hauf vorkommen. Nur war bei dir wahrscheinlich Bit setzen bzw. Bit löschen meistens auf einen Port bezogen um damit einen Portpin zu schalten. Aber
-
Thread
Kommunikation zwischen zwei STK500
leichter machen. Aber im Grunde läuft es selbst dann auf if( Pin_Eingang ist high ) Setze Pin_Ausgang auf high else Setze Pin Ausgang auf low hinaus, nur mit dem Unterschied, dass einem der Compiler da etwas abnehmen kann. Aber solange du nicht soweit bist, vergiss die Anmerkung
PINB & (1<<PINB1)) ) man könnte es auch so schreiben if( (~PINB) & (1<<PINB1) ) also: Alle Bits vom PINB umdrehen, und dann eine normale Auswertung auf nicht 0 machen. Da die Bits in PINB umgedreht wurden, ist das dann effektiv keine Auswertung auf ein 1 Bit mehr, sondern auf ein 0 Bit am Portpin
-
Thread
Quick&dirty - schnelle Problemlösungen selbst gebaut Bilder
sehr schöne und praktische Idee! Bei den käuflichen Dingern ist der Abstand der eingesteckten Bits so eng bemessen, daß man Mühe hat, so einen Bit zu greifen und herauszuziehen. Grüße Eppelein
Steckbretttauglicher zweifach 8-Bit R2R-Dac mit Spannungsfolger.
-
Thread
Wie kann man eine Temperatur vergleichen und berechnen?
> Warum ist das denn in C so "kompliziert"? Du fragst nach dem DS18B20 und der liefert dir 12 Bit, verpackt in 2 Registern mit 8 Bit. Normalerweise wird das in eine vorzeichenbehaftete 16 Bit Variable eingelesen. Alles andere passiert in *deiner* Software. Zwei 16 Bit Integerzahlen zu vergleichen
Temperaturwerte mit einer Auflösung von 0.5K aus, d.h. man muss nur das (Dual)-Komma an die richtige Stelle setzen (Fig 4 im Datenblatt)
-
Thread
Quarz-Wert 32.0C6Y
Werte stehen? >Meistens um Linien zu zeichnen oder ähnliches (also um 1 Pixel in einem >Byte zu setzen.) Kannst du mir das noch etwas genauer erklären? Man liest eine Adresse aus dem Speicher aus, und schreibt dann mit MWRITE ein Bit z.B. an diese Adresse? Welchen Vorteil erlange ich, wenn man zuerst
stehen? > >>Meistens um Linien zu zeichnen oder ähnliches (also um 1 Pixel in einem >>Byte zu setzen.) > > Kannst du mir das noch etwas genauer erklären? Man liest eine Adresse > aus dem Speicher aus, und schreibt dann mit MWRITE ein Bit z.B. an diese > Adresse? Welchen Vorteil erlange ich, wenn
-
Thread
Atmega32 - 8-Bit-Timer
/ Korrektur der Timer Zeilen sinnvoll. >> Overflow zählen != ISR(SIG_OUTPUT_COMPARE0) Wie setze ich das syntaktisch um? Conter != ISR(SIG_OUTPUT_COMPARE0) Zählt er dann so?
Es geht aber auch schicker mit dem Timer 1 (16-bit). Da kannst du dir nämlich den Compare ausrechnen lassen und den CTC-Mode benutzen (die Sekund ist allerdings nicht ganz genau, da 1Mhz nicht glatt durch 1024 teilbar ist): [c] // Timer Testprogramm
-
Thread
Interrupts einbinden
Funktionsnamen, aber habe nicht so ganz verstanden wie ich die Interrupts auf die einzelnen Ports (RB0) setze oder wie ich sie am Ende aktiviere (Habe da einen Ansatz nämlich das ich irgendwie die Befehle aus dem Buch eingebe [INTCON3bits.INT2IF; INTCON3bits.INT1 IF =0; etc.] aber kann ja nichts eingeben ohne
Funktionsnamen, aber habe nicht so ganz verstanden wie ich die > Interrupts auf die einzelnen Ports (RB0) setze oder wie ich sie am Ende > aktiviere (Habe da einen Ansatz nämlich das ich irgendwie die Befehle > aus dem Buch eingebe [INTCON3bits.INT2IF; INTCON3bits.INT1 IF =0; etc.] > aber kann ja nichts eingeben
-
Thread
Horizon EDA [War: Neues, halbfertiges Elektronik-CAD-Programm]
+CC?=g++ PKGCONFIG=pkg-config kann man den benötigten Kompiler über eine Umgebungsvariable setzen.
Abdul K. schrieb im Beitrag #5222105: > Man brauch SQlite zur Speicherung von 4 32Bit Zahlen? Du brauchst zwei Mal 32bit für Fenstergrößen? Respekt. Den Monitor hätte ich auch gerne...
-
Thread
I2C Kommunikation zwischen Atmega128 und Drucksensor
meine doofen Fragen, aber ich bin wirklich unsicher, und will, bevor ich auch nur einen Lötpunkt setze sicher sein, dass ich es richtig verstanden habe.
nicht nachvollziehen. Ich bin der Ansicht: >> Welche Sensoradresse benutzt du (1111000xb obacht: 7 Bits!)? Start Slaveadresse R/W-Bit 7 Bit 1 Bit MSB LSB 1 1 1 1 0 0 0 0 => Schreiben 1 1 1 1 0 0 0
-
Thread
Morsecode mit (Attiny22)
Anwendungen auch Morse-Codes. Anbei ein Header uim definieren der Codes. Doe Codierung sieht so aus: Bit7 codiert, ob das Zeichen mit einem langen (bit7=9) oder einm kurzen Strich (bit7=1) beginnt. Bits 6..0 enthalten das eigentliche Zeichen, wobei der erste gesetzte Bit dem ersten Ton entspricht.
A = 1 0000010 ^ das zweite zeichen (lang) ^ das erste zeichen (kurz denn bit7=1) ^ erstes gesetztes bit ist "kurz" [/pre] und noch "M": [pre] M = 0 0000011 ^ das zweite zeichen (lang) ^ das erste zeichen (lang denn bit7=0) ^
-
Thread
12 bit Wert in Array aus uint8_t speichern
Was klappt denn nicht? Du brauchst doch nur die 4 Bits, die du beschreiben willst vorher alle miteinander gezielt auf 0 setzen, ehe du dann mit dem Oder einzelne davon wieder auf 1 ziehst. [[Bitmanipulationen]] Sorry. Aber da musst du durch. Mit Und
Fall ein 1 Bit, wo in der Maske ebenfalls ein 1 Bit war. Bei einem Und hat man im Ergebnis genau dort auf jeden Fall ein 0 Bit, wo in der Maske ebenfalls ein 0 Bit war. Oft ist die Maske konstant und fix, bei
-
Thread
<< Zeichen, Bedeutung
der Ausführung von HanneS noch etwas hinzuzufügen: ... mit (1<<URSEL) kannst Du zwar das URSEL Bit setzen, Du kannst aber keine "0" hineinschieben um das URSEL Bit zu löschen. Grüße, Stefan
besonders bei mehr als 1 Bit in einem Register setzen 1. fehleranfaellig 2. nicht selbstdokumentierend ist. Bei 1 << ADMUX
-
Thread
Mal wieder: _delay_ms() Zeit stimmt nicht
klappt das auch mit dem delay. Testweise einfach den Kalibrierwert mal direkt in deinem Programm setzen. Gruß Flo
falsch > mache Mehrfach vorgeschlagen, Antwort steht m.W. noch aus: Test ohne interrupts. Setze “cli();“ vor dein delay.
-
Thread
Korrekte Oszillatoraktivierung bei fuse Bits
Hallo, Ich befasse mich neuerdings mit Bascom und stellte fest, dass ich bei der Aktivirung des Oszillators mit 16 MHz das Fusebit KLA987 mit einem Zahlencode von 111111 versehen muss Welcher Zahlencode wird bei einem 3MHz Oszillator benötigt? und wie funktioniert jenes System? Danke im Voraus Simon A.
-
Thread
PIC Assembler auf- abzählen
rückwärts zu zählen und hin und her. Ich habe probiert mit BTFSC/BTFSS zu arbeiten, kann man auch 8 Bit gleichzeitig abfragen? Außerdem habe ich schon probiert mit dem CARRY Bit im Statusregister zu arbeiten... Bitte um unterstützung. [avrasm] Main incf 0x20,1 movf 0x20,0 movwf PORTB
Ralf G. schrieb im Beitrag #3220438: > btfsc STATUS,C ; Wenn Carry-Bit=0 überspringe nächsten Befehl So wird das nix. Druck Dir TABLE 7-2: PIC16CXXX INSTRUCTION SET aus und lege es Dir auf den Tisch. Und dann schau nach, welcher Befehl das C setzen kann. Tip:
-
Thread
Funktionsparameter Gesperrt
PortLcdDataDDR = 0x00; PortLcdData = 0; // Port-A als Ausgang konfigurieren (für LCD-Control) // Bit0 = CS = ChipSelect Low-aktiv // Bit1 = R/W = Low=Schreiben // Bit2 = RS = Low=Control, High=Data // Bit3 = E = Schreibflanke H->L // Bit4 = Reset = Low-aktiv PortLcdCtrlDDR = 0xff;
(ChipSelect = An) cbi(PortLcdCtrl,0); // Bit 4 an Port-A setzen; E = 1 (Schreiben mit HighPuls an E) sbi(PortLcdCtrl,4); // Inlineassembler: kurz warten __asm volatile ("nop \n nop \n nop \n"); // Bit 4 an Port-A löschen; E = 0
-
Thread
DOGXL-Display rührt sich nicht
das Display im 4 wire 8 bit SPI Modus. Pin 26 und Pin 30 müssen demnach auf Gnd liegen. Wird der Reset richtig durchgeführt? Grüße, Peter
Hi >column_highbyte = (column & 0xF0); Das solltest du noch um 4 Bit nach rechts schieben. MfG Spess
-
Thread
Starthilfe Programmierung
Du welche Motoren alle für 8s laufen sollen (z.B. könnte in einem bestimmten Register jeweils ein Bit für einen Motor gesetzt werden, wenn die Taste weniger als 0,5s gedrückt wurde; um die betreffenden Bits zu setzen könntest Du einen zweiten Timer Interrupt verwenden). Für jeden Deiner Motoren zählst
Hi! Mit einem 8 Bit Timer ist bei 4MHz eine max. Verzögerung von 65,563 ms für einen TOV = Timerüberlauf zu erreichen. Du must nur den Vorteiler (TCCR0) auf 5 (Bit0+2=1)setzen dann wird der Timer aller 256 mys um 1 erhöht
-
Thread
DCF77 AVR-Assemblerbaustein
habe jetzt mal dieses DCF Programm mit einem anderen verglichen. Arbeitsweise: anderes Programm: bits werden nur gelesen und in Reg. gespeichert. Am Ende der Min. erfolgt die Interpretation: Parityprüfung, Fehlerbits setzen, Schieben und Speichern. Dies hat den Vorteil, daß der größere Teil in die Mainloop
verwendet werden und das ist nicht sinnvoll. Darum versuche ich eine Aufteilung. Im Interrupt müßten 2 bits gesetzt werden. Ein Fehlerbit und ein "Minute noch nicht zu Ende" bit. Im Main werden diese abgefragt: Bei Fehler, Init und überspringen, bei dem anderen bit Umspeichern, Init. So wären Umspeichern
-
Thread
Attin84 I2C mit der USI läuft nicht
Allein in der Zeit die Du damit verbracht hast das Eingangsposting zu formulieren hättest Du schon 8 Bits an einem Pin rausgeschoben, dabei am Taktpin gewackelt und das 9te Bit eingelesen.
Leitungen steuert man so: Init ab Reset: nix, d.h. PORTx.y = DDRx.y = 0. Out0: DDRx.y auf 1 setzen. Out1: DDRx.y auf 0 setzen. In: vorher DDRx.y auf 0 setzen.
-
Thread
AT90CAN128
> #include <inttypes.h> #include <stdio.h> #include "can.h" #define setbit(ADDRESS,BIT) (ADDRESS |= (1<<BIT)) #define clearbit(ADDRESS,BIT) (ADDRESS &= ~(1<<BIT)) #define checkbit(ADDRESS,BIT) (ADDRESS & (1<<BIT)) #define lichtan() setbit(PORTG,PG1) #define init_mob_rx_0 init_mob_rx
Routine sendet CAN2B Du kannst es ändern indem Du auf 2A umschaltest, dann ist der Identifierer nur 11 Bit lang statt 29
-
Thread
Kennt jemand diese WarmwasserWärmepumpe?
Die baudrate von 4800 war total falsch. Das ist viel langsamer. Ein bit 1ms. Ist das 1200 baud?
Alle Ls sind 1T lang. Der Flankenwechsel von L auf H am Ende kann eigentlich nicht mehr zu einem Bit gehören, als wird ein Bit mit einem L aufhören. Nehmen wir an 3T H entspricht 1 und 1T H 0 und zählen mal durch, dann sind es 15*8 Bit plus eins. Jetzt kann man spekulieren ob das erste mit 4T H schon
-
Thread
Mikrocontroller Ports schalten nicht
//RC0 einschalten } } [/code] habe bisher nicht viele pics benuzt. nur 32bit er. ich würde dir auch empfehlen das setzen und löschen der pins mit xxxSET und xxxCLR zu machen. so packst du nicht immer den gesamten port an
#3133817: > Soweit ich es verstanden habe muss man das OSCTUNE Register > > auf 0b01001111 setzen. Bin mir aber nicht sicher. Mit Bit#6 (OSCTUNE.PLLEN) schaltest du auf PPL-Betrieb - wenn du mit internem Oszillator im 4MHz o. 8MHz Mode arbeitest. Die restlichen Bit "tunen" nur die Frequenz