-
Thread
Mehrere I/O Pins am AT91SAM7S setzen
die Ausgänge am AT91SAM7S mit 2 verschiedenen Registern (so hab ichs jetzt zumindest mal für meinen 8Bit R2R DAC gemacht): void sound_out(char value) { p_pPio->PIO_CODR = BIT9+BIT10+BIT11+BIT12+BIT13+BIT14+BIT15+BIT16; p_pPio->PIO_SODR = (unsigned long)value << 9; } Was ich jetzt nicht ganz verstehe
Peter Pippinger schrieb im Beitrag #1929757: > void sound_out(char value) > { > p_pPio->PIO_CODR = BIT9+BIT10+BIT11+BIT12+BIT13+BIT14+BIT15+BIT16; > p_pPio->PIO_SODR = (unsigned long)value << 9; > } > > Was ich jetzt nicht ganz verstehe, dann müsste doch auf den Pins immer > ein "Zucken" entstehen
-
Thread
Frage zu UART AVR Code
R24,0x00C0 Load direct from data space +0000004E: FF85 SBRS R24,5 Skip if bit in register set +0000004F: CFFC RJMP PC-0x0003 Relative jump [/c] [c] //UCSRnA, //Configuration + Status //UDRn // read/ write 8 Bit #include <avr/io.h> #include
Falk B. schrieb im Beitrag #7337399: > Dann probier es noch mal und setz die Breakpoints auf die > Portzuweisungen. dann kommt die Fehlermeldung, dass das Setzen nicht funktioniert. Der Breakpoint wird dann einfach nicht gesetzt und auf das delay gesetzt :D Klaus
-
Thread
Ist Arduino verpönt?
Verlinkung im Forum noch nicht so zu Rande kommen: Man kann die Links auf Beiträge innerhalb der Threads setzen )
tun. Man kann uC auch effektiv in C programmieren, wie das oben durchgekaute Beispiel des Port-bits setzen zeigt. Aber dazu muss man die uC-Architektur kennen und die Doku des Controllers gelesen haben. Und der Vergleich ARM - 8bit uc hinkt doch gewaltig. Die 1-8 kByte an Programmspeicher eines
-
Thread
AVR LED Dimmen mit Logarithmus
mich schon lange nicht mehr darum gekümmert. ich wollte eine rgb-led ansteuern (3 * pwm) eine 16-bit-pwm ist mir zu langsam, da sieht man die leds "blinken", außerdem wollte ich einen tiny2313 benutzen und die haben nur 2 16-bit-pwms. (ok, plus zwei mal 8-bit-pwm) meine idee war sowas wie ein "2
frage]) drei einzelne lampen haben keinen gemeinsamen "brennpunkt" deshalb: vielleicht 10 oder 12 bit. und: die kleinen AVRs, die ich kenne haben nur 2 mal 16-bit-hardware-pwm, deshalb die "überlegung" mit den zwei "parallelen" 8-bit-hardware-pwms. oder vielleicht 8-bit-hardware-pwm und in software
-
Thread
µC + LCD + Tastatur - newbie
brauch ich so "Schaltblöcke", die..." Ist mir nicht ganz klar geworden was der Absatz bezweckt. Wenn 4 Bit gesetz sind liegen am Ausgang diese 4 Bit (natürlich alle "H") sowie weitere 4 Bit mit variablen Zustand an? Oder sind die variablen 4 nicht Bit sondern Analogwerte? "Mein Sound"chip" wird ein eigener
die LED blinkerei ist eigentlich gar kein schelchter anfang. Damit ein LED blinkt musst du nur ein Bit setzen oder löschen. Und bei allen anderen Sachen gehts prinzipiell gleich. Also entweder das Bit auf 1 oder auf 0 setzen ;-).. ganz vereinfacht :D. Die PICs wären auch vl eine Überlegung wert. Dafür
-
Thread
Free-Running and Compare Match A Auto-Triggering AD-Wandler
Interrupt-Routine wird angerufen, aber das Bist ADSC wird nicht mehr gesetzt. Ich habe probiert, das Bit ADSC manuell zu setzen. In diesem Fall läuft der AD-Wander mit falscher Free-Running Funktion, weil manuell das Bit setzten muss. In diesem Fall würde ich Single Conversion Mode verwenden, da die gleiche
mehr >gesetzt. Warum auch? Wird nur für die erste Wandlung gebraucht. >Ich habe probiert, das Bit ADSC manuell zu setzen. In diesem >Fall läuft der AD-Wander mit falscher Free-Running Funktion, weil >manuell das Bit setzten muss. In diesem Fall würde ich Single Conversion >Mode verwenden, da
-
Thread
C -> Port Bitset
MaWin schrieb im Beitrag #6060070: > #define LED_GREEN_ON { DDRB |= BIT_2; PORTB |= BIT_2; } Was ist denn das für ein Blödsinn: jedesmal, wenn man die LED einschalten will auch das DDR zu setzen.
schrieb im Beitrag #6060196: > MaWin schrieb im Beitrag #6060070: >> #define LED_GREEN_ON { DDRB |= BIT_2; PORTB |= BIT_2; } > > Was ist denn das für ein Blödsinn: jedesmal, wenn man die LED > einschalten will auch das DDR zu setzen. Ist halt so Arduino Style. Wobei da dann noch 29 andere Dinge
-
Thread
Variable ändert sich nur bei 8. Bit
auf E1 hat sich verändert, prüfen!!! if (!(tempPINA&(1<<i)) == (pina_last&(1<<i))) // Alle Bits durchgehen und vergleichen { e1c =0xFF; // Änderungsindex setzen if (!(tempPINA&(1<<i))){ e1hi[i] = 1; e1lo[i] = 0; } else{ e1hi[i] = 0; e1lo[i] = 1; } }} [/c] e1hi = Eingang 1 (PINA) wurde bei n-Bit high (GND) e1lo = Eingang 1 (PINA) wurde bei n-Bit low (VCC) e1c = Eingang 1 (PINA) hat sich verändert Zustand pina_last: 00000000 Zustand tempPINA: 00010000 Zustand e1hi: 00000000 Zustand
-
Thread
schwierigkeiten passenden Bus zu finden
, dann müsste er einfach gleichzeitig am Ausgang entweder seine oder die Daten des nächsten Node setzen. - er erhält also das erste Bit vom Master. Jetzt setzt er das erste Bit seiner Sensordaten. - nach den ersten 24 Bits (= seine RGB-Daten) sind seine Sensordaten durch (24 Bit Sensor-Daten) - ab
das ist das einfachstmögliche Setup. Und für einen 10x10 Tisch sind es 100 Slaves. Jeder hat 24 Bits zu bekommen, ergibt 2400 Bits. Mal Framerate von 25 ergibt 25 x 2.400 Bits = 60.000 Bits pro Sekunde. Jetzt lassen wir mal vorsichtshalber den Bus mit 100 kBit fahren, dann sind wir m.E. nicht in
-
Thread
Bei lcd-lib nur PD2-PD7 verwenden
4 bit modus und einen shift-operator beim LCD-PORT define.
ich schon... [c]... LCD_PORT |= temp1; // setzen ... LCD_PORT |= temp2; // setzen [/c] mfg ;)
-
Thread
32 Bit vector in ein 33 Bit unsigned überführen, wie geht das?
gleich das MSB in das 33. Bit reinschreibt, dann erkennt man einen Überlauf eines 31Bit Zählers.
stimmt. Gibt es eigentlich einen Grund dafür wieso signed generell so definiert ist dass das signed Bit bei negativen Zahlen gesetzt ist? Ich meine, das könnte man doch auch bei positiven Zahlen setzen. Dann könnte man die Zahlen viel einfacher z. B. sortieren.
-
Thread
Ist "warning" nach dem Compilieren wichtig?
baud */ #define UART_BAUD_RATE 9600 void Schalter1 (void) { PORTC |= (1 << PORTC0); // Bit 0 setzen _delay_ms(2500); PORTC &= ~(1<<PORTC0); // Bit 0 loeschen } void Schalter2 (void) { PORTC |= (1 << PORTC1); // Bit setzen _delay_ms(2500); PORTC &= ~(1<<PORTC1); //
); // Bit setzen _delay_ms(2500); PORTC &= ~(1<<PORTC3); // Bit loeschen } int main(void) { // eigene Variablen uint8_t Pinabfrage; // Baudrate einstellen und BITS in UBBR setzen
-
Thread
Z80 Mikrocomputer Bastelei
Heinrich schrieb im Beitrag #2236125: > Soweit ich weiß, ist der ATMEGA644 auch nur 8-bit breit. Es gibt auch noch was anderes als AVR. Der Trend geht heute eindeutig zu 32 Bit System. Zumal 32Bit uC heute zum Preis von 8 Bit zu haben sind.
"Es gibt auch noch was anderes als AVR. Der Trend geht heute eindeutig zu 32 Bit System. Zumal 32Bit uC heute zum Preis von 8 Bit zu haben sind." Ja Helmut, das ist mir auch bekannt. Das Problem ist dabei, dass ich wieder von vorne anfangen muss. Und wer garantiert mir dann in
-
Thread
MCP2515 schon wieder. Fehlererkennung abschalten o.Ä
zugehörenden Puffer ab, eine alte gleiche Nachricht wird einfach überschrieben. Dann legst Du noch 4 Bits an, jede Nachricht setzt das zugehörende Bit. Sind alle 4 gesetzt, weißt Du, daß jede Nachricht mindestens einmal empfangen wurde und kannst damit irgendwas machen. Peter
>Dann legst Du noch 4 Bits an, jede Nachricht setzt das zugehörende Bit. >Sind alle 4 gesetzt, weißt Du, daß jede Nachricht mindestens einmal >empfangen wurde und kannst damit irgendwas machen. Genau so habe ich das im Moment
-
Thread
Atmel kündigt AVR XMEGA-Mikrocontroller an
Bereich auslagern möchte. Dann kann er über diese virtuellen Registerbeich mit den Single-Opcodes die Bits schnell togglen, auslesen, setzen, löschen usw. das macht man natürlich nur mit denjenigen Ports bei denen man schnell Bits verändern möchte, also ohne RMW-Feature-Umweg in atomarer Weise. Auch das
das Thema ist doch geklärt. Es ist ein ATmega, 8Bit. Die 16 Bit sind quasi Werbung mit dem Hintergrund das man über den EBI ja bis zu 16Mb an Speicher dranhängen kann. Die 16Bit haben nichts mit der MCU zu tun allerhöchstens mit dem externen Speicherinterface
-
Thread
CAN: Timing Probleme
. Ansonsten hast Du halt insgesamt 6 Filter die Du setzen kannst. Ich weis nicht wie das bei Deinem Arduino ist, aber Du musst in der Konfiguration garantiert den Empfangsmodus noch einstellen!? Dieser wird durch die RXM-Bits gesetzt: 11-alle IDs werden
.init_Mask(0, CAN_EXTID, 0x00000000); Beachte: 0x2003 (10 0000 0000 0011) braucht mehr wie 11 Bit, daher werden Extended CAN IDs benutzt. Diese sind dann 29 Bit lang.
-
Thread
Modbus RTU Protokolländerung
endian), vor allem aber fehlende Fliesskommazahlen und andere Ganzzahlentypen als vorzeichenbehaftet 16bit. Sicher gibts da immer Workarounds, in der freien Wildbahn scheint aber jede mögliche Kombination vorzukommen wie man z.B 32 Bit floats in 2 16 Bit Register packt, schön ist das nicht.
vor allem aber fehlende Fliesskommazahlen und andere > Ganzzahlentypen als vorzeichenbehaftet 16bit. Sicher gibts da immer > Workarounds, in der freien Wildbahn scheint aber jede mögliche > Kombination vorzukommen wie man z.B 32 Bit floats in 2 16 Bit Register > packt, schön ist das nicht.
-
Thread
Windows 10 - jetzt bekomme ich richtig Angst
sehr viel seltener. Neben des alten 16-Bit-Zeugs fällt aber auch sämtliche Hardware unter den Tisch, für die es nur 32-Bit-Devicetreiber gibt. 32-Bit-Software lässt sich problemlos unter 64-Bit-Windows nutzen, 32-Bit-Devicetreiber aber nicht
schon Dateien für Windows Vista 64 Bit enthalten. Das Gerät ist von 2010. Ich habe gerade gelernt, daß es sogar mal eine 64 Bit Version von XP gab.
-
Thread
Pollin E0855-2 SED1530-Treiber
Reversebitorder eigentlich so umständlich? Könnte man aus [c] uint8_t ReverseBitorder (uint8_t Bits) { uint8_t ReversedBit; ReversedBit = (Bits >> 4) | (Bits << 4); ReversedBit = ((ReversedBit & 0xcc) >> 2 ) | ((ReversedBit & 0x33) << 2); ReversedBit = ((ReversedBit & 0xaa) >> 1 ) | (
Ich habe noch einen Fehler gefunden. Init_SPI: Das SPI2X Bit ist im SPSR Register, nicht in SPCR. Setzen mit "SPSR = (1<<SPI2X);" statt "|=", löschen mit "SPSR = 0;". @Christian > Und warum verwenden alle uint8_t? Ist unsigned char nicht eindeutiger?
-
Thread
STM32 - Low Level Library Dokumentation
heraus? Nein, eben nicht. Lowlevel-treiber sollten die Dinge abstrahieren, also nicht so: void SetzePin(int port, int bit, bool hi_lo); sondern so: void SchalteLampeEin(void); Ich denke, du merkst den Unterschied: Das SetzePin abstrahiert überhaupt nichts, sondern verallgemeinert bloß. Noch mehr verallgemeinert wäre das: void SetzeBit(int variable, int bit, bool hi_lo); Aber wer braucht so etwas denn? Zweck der Abstrahierung ist, daß man sich in den höheren Programmschichten eben NICHT mehr um die niederen Details zu kümmern
-
Thread
LPC11C24 HalloWelt-Programm
Du kannst dir für diesen kleinen M0 die Bibliotheken komplett sparen. Halt dich an die Doku und setze die Bits in den Registern so wie es da steht. Dann hast du nur die Hälfte zum Lernen. Natürlich brauchst du noch einen Startupcode und ein Linkerscript. Da das jede IDE selber mitbringt und auch jede
ins Manual zu schauen und nicht in irgendwelche Libs. Um das Pin 3 von Port 0 auf Ausgang zu setzen: [C] LPC_GPIO0->DIR |= (1<<3); // das UL kannst du dir hier sparen [/C] Um das Bit zu setzen: [C] LPC_GPIO0->DATA |= (1<<3); [/C] Oder Ausschalten: [C] LPC_GPIO0->DATA &= ~(1<<3
-
Thread
PIC18 - 10bit vs. 8bit PWM
Martin schrieb im Beitrag #2859563: > Ist das nun ein 10bit wertiges PWM-Signal oder nicht? Ich glaube nicht, weil ein 10bit Wert aus zwei 8 bit oder einem 16bit register besteht.
Hallo, danke schonmal für die bisherige Hilfe! Mal angenommen ich setze CCPR1L = 0xFF; dann hat mein PWM 100% Jetzt habe ich zum spaß einfach mal die beiden bits: CCP1CON.DC1B1 = 1; CCP1CON.DC1B0 = 1; oder auch mal 0;1 oder 0;0 gesetzt. Aber eine änderung am ausgang
-
Thread
Die PowerDown-Tücke!
Geht die MCU wirklich in den Powerdown-Modus ? Beim setzen des SE-Bits löscht Du gleichzeitig die SM- und ISC-Bits im MCUCR. Gruß Thomas
@Hagen So kompliziert wie das scheint ist das gar nicht. Man braucht doch nur das Maskierungs-Bit des Compare-Interrupts vor dem SEI zu löschen und erst nach dem CLI wieder zu setzen. Ich benutze auch ISR's die die Int's wieder freigeben, bis jetzt hatte ich noch nie Probleme. Thomas
-
Thread
Mikrocontroller für kleine Projekte Attiny & Co.
deutlich komplexer realisiert als beim LPC (schon weil der I/O-Space nicht reicht und wegen der 8-bit Register für 10-bit ADC usw)
kleine Projekte den > ATxmega8E5(16E5,32E5), er ist schnell und einfach und hat auch einen 12 > Bit DAC drauf Nur mal zum Vergleich: für den gleichen Preis gibt es 8051 mit 20x 14-bit ADC und 4x 12-bit DAC mit 72 MHz und doppelt so viel Flash / RAM: EFM8LB12F64E-A-QFP32
-
Thread
signed 16bit * usigned 16 bit = signed 32 bit Multiplikation??
du solltest eine signed 24 oder 32 bit multiplikation vornehmen, da der unsigned 16 bit (16 bit value) den wertebereich des signed 16 bit (15 bit value) übersteigen kann.
>> ; u16bit * s16bit multiplikation >> ; r19:r18 * r21:r20 = r11:r10:r9:r8 >> clr r10 >> clr r11 >> >> mul r20,r18 >> mov r8 , r0 >> mov r9 , r1
-
Thread
attiny 3 16bit PWM kanäle mit 8bit timer
hi, attiny mit 3 16bit PWM kanäle mit 8bit timer hat sowas schon mal jemand Programmiert und wär bereit den Code zu posten. hab mir das so vorgestellt: pwm-werte größe nach sortiert. im 8bit-timer-überlauf: 8bit-variable
, ob ebenfalls in diesem 8bit-zyklus dran, falls ja neuen outputcompare setzen sonst nixmachen beim überlauf der pwm-highbyte-variable, rücksetzen der pins prinzipiell sollte es ja so gehen, aber der Teufel liegt ja bekanntlich
-
Thread
Probleme beim Bit-Löschen
bin mir aber sicher, das ich mal wieder den Wald vor Bäumen nicht sehe. Möchte einen Ausgang setzen bis eine gewisse Temperatur erreicht ist, und ihn dann wieder löschen bzw. ausschalten. Bisher dachte ich mir das so: if ((ist_temp+5)<=soll_temp) { PORTD|=(1<<PD7); //Heizelement
Float-Datentyps für eine Temperaturangabe bei einem Sensor, der allenfalls zwischen -55 und +125°C arbeite, 9 Bit liefert und damit weder im mK- noch im GK-Bereich misst, ist dem Problem wohl nicht ganz angemessen. Aber eine Fixkommarechnung zu verwenden und für die Anzeige das Komma/Punkt an geeigneter Stelle
-
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
Assemblerprogramm zur Ausgabe eines Zeichens auf UART3
Dann ist es natürlich kein Wunder dass der UART einen "Glitch" sendet... Du solltest also nach dem Setzen des "SW0" Bits im RCC_CFGR darauf warten, dass die SWS Bits im RCC_CFGR den Wert 01 haben, und erst dann weiter machen. Vielleicht solltest du dem UART einen externen Pull-Up Widerstand verpassen
> es natürlich kein Wunder dass der UART einen "Glitch" sendet... Du > solltest also nach dem Setzen des "SW0" Bits im RCC_CFGR darauf warten, > dass die SWS Bits im RCC_CFGR den Wert 01 haben, und erst dann weiter > machen. > > Vielleicht solltest du dem UART einen externen Pull-Up Widerstand
-
Thread
Normal-Mode CAN-BUS
the PLL as the source of the CAN system clock PORT_CAN_TX_PIN = 1; // CAN TX Pin auf 1 setzen, der Tranceiver funktioniert sonst nicht CAN_SetBaudRate (brp); // ECAN Module in mode 0 ECANCON = 0x00; RXB0CON = config & CAN_CONFIG_B0_BITS; RXB1CON = config & CAN_CONFIG_B1
stellt sich mir die frage was ich mit den empfangenen Daten anstellen darf/muss... müssen irgendwelche bits nach dem Empfangen manuel zurück gesetzt werden?? beim schreiben setze ich einfache alle notwendigen variablen und setze am ende das TXREQ-Bit zum senden beim auslesen, lese ich alle Daten aus
-
Thread
Unterbrechen eines Befehls durch ISR
Befehls durch eine ISR abläuft. Wenn ich folgenden Befehle benutze um den Pin2 des Ports B zu setzen: (I) PORTB |= _BV(PB2); // 2 Takte Und ich habe eine ISR die am gleichen Port B aber einen anderen Pin (z.B.: PB3) setzen möchte, dann kann es doch passieren, das der Befehl (I) durch ein Befehl
Dochdoch, das ist auch eine AVR-Spezialität, Bit-Setzen im PIN-Register toggelt das entsprechende Ausgangspin Ahoi, Martin
-
Thread
DOGM Display an STM32
GPIO_SetBits(LCD_CSB); // LCD_CSB = 1 // GPIO_SetBits(LCD_SCK); // LCD_SCK = 1 delay(500); // Wartezeit nach POWER-ON bis VCC stabil ist // Grundinitialisierung (SPI, wie im 8-Bit
// LCD_CSB = 1 GPIO_SetBits(GPIOA, GPIO_Pin_4); } // *********************************************************************** // Lِschen des LCD-Display // und Kursor auf Position 0,0 setzen // *************************
-
Thread
Bitweise auf PORT Ausgeben
Maskierung freistellen. Um 6 Positionen nach unten schieben. PORTB einlesen, PB0 und PB1 definiert auf 0 setzen. Die vorher geschobenen beiden Bits mit einem Oder drüberschreiben. Das Resultat wieder auf PORTB ausgeben. -> die Lösung mit cbi/sbi dürfte einfacher sein. Vor allem das Schieben um 6 Positionen
or temp, count3 out PORTB, temp [/avrasm] Es fehlt einfach der richtige Befehl :( (Bit setzen in Abhaengigkeit eines anderen Bits oder sowas :P ) Danke fuer eure Hilfe!
-
Thread
Atmega32 Timer mit CTC-Modus
Verdacht nicht los, dass da noch etwas fehlt. Im Datenblatt steht da etwas von einem "I-flag": • Bit 3 – OCIE1B: Timer/Counter1, Output Compare B Match Interrupt Enable When this bit is written to one, and the I-flag in the Status Register is set (interrupts globally enabled), the Timer/Counter1 Output
ist denn der Nachteil von volatile und was ist denn der atomare Zugriff? Im Tutorial ist der 8-Bit Timer mit Beispielen gut beschrieben, diese fehlen meiner Ansicht nach bei dem 16-Bit Timer. Solche Beispiele fördern einfach das Verständnis für die Anwendung der im Datenblatt einzeln erklärten Parameter
-
Thread
was wenn Schieberegister kleiner ist?
mit LSB. Die Datenbits werden wie folgendes aufgeteilt: Es wird pro Umdrehung 2-paket jeweils 8-Bits gesendet. Paket-1: Bit-1: Start Bit-2: Direktion Zustand Richtung 0 Rechts 1 Links Bit-3 bis 7:Impulszahl Bit-8: Ende Paket-2: Bit-1 bis 2: Start Bit-3: Direktion Bit- 4 bis
VOLLTREFFER, DANKE DIR!!!!! >also ungenutzt bedeutet NULL; Du kannst sie auch auf Eins oder 0815 setzen, aber sie haben dennoch keine Information, weil der Wert konstant ist. ;-) >> Wenn es WIRKLICH 9 Bit sein müssen, >WAS heisst wenn es wierklich??? Wenn dein Gerät, welches per SSI die Position
-
Thread
Attiny45, timer tut nichts?
> CTC Mode einstellen vergessen! Aber ich setze doch den counter manuell zurück? Ich möchte selbst steuern, wann er sich zurücksetzt. > das sind aber keine 4096, sondern 2048. ok, ich hab mal vier bits gesetzt (CS10 bis 13) -> ca. 16k Prescaler
Hz "Flimmern" nennst Du "Blinken"? Du zeigst uns wirklich Dein aktuelles Programm (also ohne Setzen der PSR1/PCKE Bits)? CKSEL Fuse?
-
Thread
BME280-Modul mit Adresse 0x77 anstatt 0x76 (ohne selberfummeln)
und dem R/W-Bit zusammen setzt.
: "The 7-bit device address is 11011x. The 6 MSB bits are > fixed. The last bit is changeable by SDO value and can be changed during > operation" > > Und etwas weiter hinten dann die Fig. 9 mit den Bytes,
-
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
Nochmal Frage zum Assemblerporgramm ATmega16
schieb > eine Abfrage > CPI schieb, 0b11111111 > sinnig oder unsinnig wird. > Stichwort carry-bit... Drum sagte ich auch, dass es Zufall ist, dass sein Programm funktioniert. Die 'warten' Subroutines setzen das Carry Flag. Ich brenn das ganze jetzt mal in einen Mega16. Eine Frage noch
sagte ich auch, dass es Zufall ist, dass sein Programm >funktioniert. Die 'warten' Subroutines setzen das >Carry Flag. Nein, tun sie nicht. DEC beeinflusst kein Carry-Bit. Dafür gibt es SUBI.
-
Thread
ATtiny43U und Reset als IO
8MHz und den 1-Wire Mode an PB0. Und über http://www.engbedded.com/fusecalc/ die richtigen Fuse-Bits setzen. Ich verwende avrdude zum programmieren.
Sorry, der RC Oszillator läuft mit 8MHz schauf auf die Fuse Bits !
-
Thread
ATMEGA8: LED über Timer-Interrupt blinken lassen funktioniert nicht Gesperrt
einen Mist gleich gar nicht an. Benutze die Bitnamen > TCCR0 = 00000101; // Prescaler auf 1024 setzen, Takt = 8MHz Das hier macht garantiert nicht das, was du haben willst Wie gesagt: Benutze die Bitnamen, dann passiert dir so ein Scheiss nicht DDRB = 0xFF; // Alle Bits an Port B auf
Schreibweise zu schreiben. Tja. Das Problem ist, dass [C] TCCR0 = 00000101; // Prescaler auf 1024 setzen, Takt = 8MHz [/C] keine Binärschreibweise ist. Damit hast du die Bits 6 und 0 gesetzt und nicht 2 und 0. Das ist nämlich Oktalschreibweise und nicht Binär. Binär wäre gewesen [C] TCCR0
-
Thread
Daten übertragen
zum Slave irgend einen Wert zb. nur 0 und somit empfange ich den Wert vom Slave. Wenn im Slave 8 Bit enthalten sind, wie wird das zum Master geschickt. Der Master empfängt ja einzeln 8 Bit. Was befindet sich im SPDR. Ist im SPDR ein BIT als char, somit 8 Bit gespeichert. MfG
diesen Übertragungstakt kann der Slave sein Byte loswerden. > Der Master empfängt ja einzeln 8 Bit. Was befindet sich im SPDR. > Ist im SPDR ein BIT als char, somit 8 Bit gespeichert. Nein. Die Hardware setzt die 8 Bit wieder zu einem Byte zusammen.
-
Thread
6502 Emulation auf AVR ?
Assem programmiert und würdet dadaurch jeden Geschwindigkeitsvorteil wieder tot machen. Mit einem 32Biter nen 8 Biter emulieren, naja.
für sowas meist nicht. Man muß eben in den alten Busstrukturen denken, die benutzt wurden... 8 Bit Daten -> 1 Port für SID, Ram, evtl. Display 8 Bit Low-Adresse für Ram ist der gleiche Port, muß sowieso der 573 ran. 8 Bit H-Adresse für Ram und als Low-Adresse für SID dazu als Einzel-Pins:
-
Thread
DIVISION 32 BIT / 32BIT Beispiel (Assembler) ATmega8
Eine mögliche Variante für die Division einer 32-Bit Zahl durch eine 32-Bit Zahl. Diese Divisions-Routine wurde in Assembler geschrieben und ist nicht nur für einen ATmega8 geeignet. Bernhard
Hallo zusammen, Hat denn jemand von euch eine echte 32 Bit Multiplikation mit 64 Bit Ergebnis in Assembler ? Ich müsste Werte grösser als 25 000 000 miteinander Multiplizieren. Aber wo ich auch suche das grösste war bisher 24 * 24 Bit was ich gefunden habe.
-
Thread
ADC im 8 bit Modus
und dementsprechend keine großen Erfahrungen mit dem AVR-GCC und wollte fragen wie man den ADC auf 8 bit setzen kann. Es müsste doch irgendwas mit ADLAR oder so sein. Vielen Dank im Voraus, Tommy
[c]ADMUX |= (1 <<ADLAR);[/c] so setze ich doch die bitreihenfolge anders. und dann kann ich aus ADCH den wert auslesen, oder?
-
Thread
ARM9 / STR9 Dev-Kit mit Ethernet/USB/CAN für 39,-
ganz vergessen... Die 10,4MHz sind der Bittakt, Abtastwerte sind 16Bit lang.
@Dominic: Unterstützt OpenOCD (jetzt) auch das Setzen/Löschen des Flashbank-Mapping-Bits : CSX = Mapping of CS0 and CS1 sowie das Flashen der bei gesetzem Mapping-Bit vertauschten Flashbänke (Bootbank 32 KByte, Nonbootbank 512 KByte) des Str912
-
Thread
FT2232H Sync FIFO
auch nur auf Platte schreibt und später verrechnet. Übertragen muss ich die Pixeladresse und die 8x16Bit. Die Pixeladresse sind jedoch nicht die 2x16 Bit die an den AD-Wandlern ankommen sondern nur jeweils die oberen 11 Bit, denn mehr als 2048x2048 Pixel kann man in der Steuersoftware nicht einstellen. Macht zusammen 2x11Bit + 8*16Bit = 150Bit. Und damit ich im Datenstrom irgendwie den Anfang und das Ende eines Pixels erkennen kann habe ich mir das so gedacht: Das letzte Bit jedes Bytes ist '0' ausser wenn ein neues Paket
-
Thread
1-Wire und DS1820 Testprog
Hallo, ich darf den pin nie auf high setzen? du meinst, ich setze immer nur low, die high kommen vom pullup? Die Symbole muss ich mir nochmal angucken. Bei den Delay meinst Du: ldi a1, 480 * xtal / 1000000 / 7 ? allerdings läuft
nächsten Devices benötigt wird. Hast Du mehr als 128 Byte RAM, dann must Du die Routine auf 16-Bit Z-Pointer erweitern. Peter
-
Thread
Mit Arduino und Schieberegister 74HCT595
von IC2 verbinden? Vergibt der IC dann so eine Art Busaddresse Versteh ich das richtig? Ich setz den DataPin HIGH. Clock- Takt "wackeln. Jedesmal wenn ich am Clock Takt wackle wird ein BIT mit "1" wenn der DataPin HIGH ist bzw. ein BIT mit "0" hineingeschoben? Beispiel mit einem 8-Bit Schieberegister
Latch DS = Daten Q7' >> DS vom nächsten OE/ fest an GND MR/ fest an Vcc Am Takt wird bei jedem Bit gewackelt, am Latch einmal, wenn alle Bits raus sind. 8 Bit = 8 Takte + 1 Latch 16 Bit = 16 Takte + 1 Latch. usw. mfg.
-
Thread
PWM Erzeugung mit ATTiny25 mit fester Auszeit
Modus bei dem man den Top-wert einstellen kann? (beim atmega48 wären das z.B. Mode 5 oder 7 bei den 8bit-Timern)
Das GTCCR Register habe ich bisher nicht beachtet. Diese Bits stehen also auf "0". Grüße Karsten