-
Thread
-
Thread
Initialisisung von Interrupt
meines externen interrupts. .org 0x000 rjmp Initial rjmp Inter0 .org 0x00D Initial: ldi tmp, High(RAMEND) ; Stack initialisiert out $3E, tmp ldi tmp, Low(RAMEND) out $3D, tmp in tmp, $35 ori tmp, 0b00000011 ;Int0 auf steigende Flanke setzen MCUCR out $35, tmp in tmp, $3B ori tmp, 0b01000000 ;Int0 freigeschaltet GIMSK out $3B, tmp sei Main: nop rjmp Main Inter0: nop reti sobald der debugger die stelle abarbeitet, an der das globale interruptflag gestzt
-
Thread
Pollin 16080 Touch mit ATMEGA32 und BASCOM
--- NormalFall: '---[W]---------------------------------------------------------------- Tmp1 = X1 / 7 Tmp2 = Y1 - S1 Tmp2 = Tmp2 * 24 Tmp2 = Tmp2 + S2 w = WorksheetFunction.RoundDown(Tmp1 + Tmp2, 0) 'w = Tmp1 + Tmp2 '---[X]---------------------------------------------------------------- Tmp1 = Y1 - S1 Tmp1 = Tmp1 * 24 Tmp1 = Tmp1 + S2 Tmp1 = Tmp1 * 7 Tmp2 = w * 7 x = Tmp1 - Tmp2 x = x + X1 '---[V]-------------------------------------------------------
-
Thread
eventqueue in c schreiben
event getEvent(){ length = length - 1; event ret = mainEventQueue->data; eventQueue tmp = mainEventQueue; mainEventQueue = mainEventQueue->next; free(tmp); // free allocated memory return ret; } [/c]
| +------+ | | o-----------------+ +------+ [/pre] [C] free(tmp); // free allocated memory [/C] Das Rechteck, auf das tmp zeigt, wird ausradiert [pre] mainEventQueue tmp +------------------+ +----------+ |
-
Thread
Universal-RC5-Fernbedienung
{ nec_data = IRNEC_NOREC; repeat = 0; } uint8_t is_nec_repeat (void) { uint8_t tmp; tmp = repeat; repeat = 0; return (tmp); } uint32_t get_nec_data (void) { uint32_t tmp; uint8_t intStat = SREG; cli(); tmp = nec_data; nec_data = IRNEC_NOREC
nec_data = tmp; tmp_cnt = 0; } } irrc_time = 0; } } bit_cnt = tmp_cnt; irrc_tmp = tmp; } [/c]
-
Thread
48Bit BCD Code in Binärcode wandeln
nichts, was nicht noch besser ginge... ;-) Die Multiplikation in dieser Zeile: [vhdl] tmp <= resize(tmp*10 + unsigned(BCD(idx*4-1 downto idx*4-4)),tmp'length); [/vhdl] Kann durch eine zusätzliche Addition ersetzt werden: [vhdl] tmp <= resize(tmp*8 + tmp*2 + unsigned(BCD(idx*
nichts, was nicht noch besser ginge... ;-) > Die Multiplikation in dieser Zeile: > [vhdl] > tmp <= resize(tmp*10 + unsigned(BCD(idx*4-1 downto > idx*4-4)),tmp'length); > [/vhdl] > Kann durch eine zusätzliche Addition ersetzt werden: > [vhdl] > tmp <= resize(tmp*8 + tmp*2 + unsigned
-
Thread
Kann man folgenden Code platzsparender schreiben
Schau mer mal [c] void Send(uint16_t data) { uint16_t tmp; PORT_DISPLAY &= ~(1<<DISP_CS); for(int i=15; i>=0; i--) { tmp = data & (1<<i); PORT_DISPLAY &= ~(1<<DISP_CLK); if(tmp > 0) PORT_DISPLAY |= (1<<DISP_DATA);
24 ) & 0xFF); msg[4] = 0x00; for(j=0; j<5; j++) { for(i=0; i<8; i++) { tmp = (msg[j] & (1<<i)); PORTD &= ~(1<<PIN_WCLK); if (tmp > 0) PORTD |= ((tmp >> i) << PIN_DATA); else PORTD &= ~(1<<PIN_DATA); PORTD |= (1<<PIN_WCLK)
-
Thread
R_AVR_13_PCREL allerdings auf eigene Datei
-fpack-struct -fshort-enums -mshort-calls -g2 -Wall -c -std=gnu99 -mmcu=atmega16 -MD -MP -MF"MC35_Steuerung.d" -MT"MC35_Steuerung.d" -o"MC35_Steuerung.o" ".././MC35_Steuerung.c" In file included from .././MC35_Steuerung.c:20:0: H:\AVR\Wasser\MC35_Steuerung\MC35_Steuerung\definitionen.h(24,2
`uart_put_kommando': /tmp/MC35_Steuerung/MC35_Steuerung/build/.././at_steuerung.c:54: relocation truncated to fit: R_AVR_13_PCREL against symbol `uart_putc' defined in .text section in uart.o collect2: ld returned 1 exit status
-
Thread
Suche nach einem Temperatursensor
TMP35/36/37 von Analog Devices fangen erst bei 2,7V an. ZMD Sensoren gehen ab 3,0V. TMP102 von TI ist Digital, geht ab 1,4V TMP300 von TI ist Analog, geht ab 1,8V; 10mV/K
LM35 von National Semiconductors.
-
Thread
Für ATtiny4313 kompilieren?
subi r28,lo8(-(-8)) ; leds, ldi r24,0 ; val rjmp .L3 ; .L2: ldi r18,lo8(1) ; tmp54, ldi r19,0 ; rjmp 2f 1: lsl r18 ; tmp58 2: dec r28 ; leds brpl 1b mov r24,r18 ; val, tmp58 ldi r28,0 ; leds .L3: subi r24,lo8(-(-1)) ; , rcall SPI_MasterTransmit
vitrinencontroller.o' /opt/cross/avr/lib64/gcc/avr/4.7.0/../../../../avr/bin/as -v -mmcu=attiny4313 -o /tmp/ccYThXke.o /tmp/ccfMW9TH.s GNU assembler version 2.19.1 (avr) using BFD version (GNU Binutils) 2.19.1 + coff-avr-patch (20050630) Known MCU names: avr1 avr2 avr25 avr3 avr31 avr35 avr4 avr5 avr51
-
Thread
AVR-ASM Knobelei : Bitmanipulation am LCD im 4-Bit Mode
praktisch gemeint? Im letzteren Fall biete ich etwas in der Art an: [avrasm] LCDb: ; byte push tmp0 swap tmp0 rcall LCDn pop tmp0 LCDn: ; nibble sbi PORT_LCDen,LCDen cbi PORT_LCDd3,LCDd3 sbrc tmp0,3 sbi PORT_LCDd3,LCDd3 cbi PORT_LCDd2,LCDd2 sbrc tmp0,2 sbi
sbrc tmp0, 3 sbr tmp1, 1<<LCDd3 sbrc tmp0, 2 sbr tmp1, 1<<LCDd2 sbrc tmp0, 1 sbr tmp1, 1<<LCDd1 sbrc tmp0, 0 sbr tmp1, 1<<LCDd0 ;* ENABLE auf 1 sbr tmp1, 1<<LCDen
-
Thread
Infrarot Empfänger "verschoben"
dann doch überschaubar auch der Rest ist überschaubar. Die Art der Fernbedienung ergibt sich aus tmp1 zu tmp2 [c] if(((tmp[1])/(tmp[2]/10))>7 && (tmp[1]/(tmp[2]/10))<13)//rc5 //tmp[1]/f_ir=10 f_ir=tmp[1]/10; if(((tmp[1])/(tmp[2]/10))>17 && (tmp[1]/(tmp[2]/10))<22)//nec f_ir=tmp[1]/102;
[c] ir_adr=0;ir_cmd=0; for(i=18;i>3;i=i-2) { ir_adr=(ir_adr<<1); if (tmp[i]/f_ir>11)ir_adr++;} ir_adr|=128; for(i=50;i>35;i=i-2) { ir_cmd=(ir_cmd<<1); if (tmp[i]/f_ir>11)ir_cmd++; } [/c] auch kein Zauberwerk.
-
Thread
[V] Rasterelektronenmikroskop
TMP fürs Vorvakuum?? Na das hab ich ja noch nie gehört. Ich glaub eher, daß eine TMP ein Vorvakuum braucht, um überhaupt hochlaufen zu können.
magic smoke schrieb im Beitrag #3600577 > TMP fürs Vorvakuum?? Na das hab ich ja noch nie gehört. Ich glaub eher, > daß eine TMP ein Vorvakuum braucht, um überhaupt hochlaufen zu können. Naja, vor der TMP saß natürlich noch eine Rotationspumpe
-
Thread
Einzelne Bit in Bitfeld in for Schleife ansprechen
case 3: tmp = Ausgang.A3; break; case 4: tmp = Ausgang.A4; break; case 5: tmp = Ausgang.A5; break; case 6: tmp = Ausgang.A6; break; case 7: tmp = Ausgang.A7; break; case 8: tmp = Ausgang.A8; break; case 9: tmp = Ausgang.A9; break; case 10: tmp = Ausgang.A10; break; case 11: tmp = Ausgang.A11; break; case 12: tmp = Ausgang.A12; break
-
Thread
Zahlenreihe und Formel
Wert 10 2,1 0 15 3,15 42 20 4,2 73 25 5,25 95 30 6,3 111 35 7,35 123 40 8,4 130 45 9,45 139 50 10,5 145 55 11,55 152 60 12,6 158 65 13,65 166 70 14,7 171 75 15,75 174 80 16,8 178 85
4)&0xf)+1]*(h&0xf) ); pwm <= tmp/16; [/c]
-
Thread
Berechnungen auf avr 8 bit
size 9 (8) */ foo2: movw r18,r22 ; i, i ; 4 *movhi/1 [length = 1] mov r19,r18 ; tmp45, i ; 33 *ashlhi3_const/3 [length = 2] clr r18 ; tmp45 sub r24,r18 ; tmp47, tmp45 ; 14 subhi3/1 [length = 2] sbc r25,r19 ; tmp47, tmp45 lsl r24 ; <result> ; 32
(7) */ [/pre] Kann er aber noch etwas besser (-Os -morder1): [pre] foo2: mov r19,r22 ; tmp45, i ; 35 *ashlhi3_const/3 [length = 2] clr r18 ; tmp45 sub r24,r18 ; zahl, tmp45 ; 14 subhi3/1 [length = 2] sbc r25,r19 ; zahl, tmp45 lsl r24 ; <result> ; 34 *
-
Thread
Schieberegister ersetzen
holen wieder hinein schicken CBI PORTD, 2 MOV tmp, R18 SBI PORTD, 2 RETI init: ldi tmp, LOW(RAMEND) out SPL, tmp ldi tmp, HIGH(RAMEND) out SPH, tmp ; Ports SBI DDRD, 2 ; Testausgang ; Timer
ldi tmp, 8 ; 50% Tastung out OCR0B, tmp ldi tmp, 0x01 ; Irq an sts TIMSK0, tmp SBI DDRD, 5 ; PD5 PWM-Port als Ausgang ; SPI init LDI tmp, 0x15 OUT
-
Thread
Assembler (AVR) Freaks bitte: der schnellste Weg, einen ganzzahligen Wert zu skalieren? Gesperrt
mov r18,r24 ; value, value ldi r19,0 ; value sub r18,r30 ; tmp58, _9 sbc r19,r31 ; , _9 ldi r21,lo8(100) ; tmp60, mul r21,r18 ; tmp60, tmp58 movw r24,r0 ; tmp59 mul r21,r19 ; tmp60, tmp58
sub r30,r22 ; , min sbc r31,r31 ; ldi r21,lo8(100) ; tmp60, mul r21,r30 ; tmp60, tmp58 movw r24,r0 ; tmp59 mul r21,r31 ; tmp60, tmp58 add r25,r0 ; tmp59 clr __zero_reg__ sub r20
-
Thread
Digitalthermometer mit 0,01°C/K oder 0,001°C/K Genauigkeit?
Beliebiger µC + TMP117: https://eckstein-shop.de/AdafruitTMP117C2B101C2B0CHighAccuracyI2CTemperatureSensor 8mK Auflösung, Ungenauigkeit +-0,1°Cmax im Besten Fall, korrekte Nutzung und Messumgebung vorausgesetzt.
Steffen I. schrieb im Beitrag #7349919: > Beliebiger µC + TMP117: > https://eckstein-shop.de/AdafruitTMP117C2B101C2B0CHighAccuracyI2CTemperatureSensor > 8mK Auflösung, Ungenauigkeit +-0,1°Cmax im Besten Fall, korrekte Nutzung > und Messumgebung vorausgesetzt
-
Thread
PT100 Auswertung
@ Nix hallo und guten Morgen. Erstmal danke für die Antwort das Problem mit dem LM 35 ist das die Kabellänge nicht so hoch werden darf den wenn ich greade mal 25 C° bei 3,5 V habe dann habe ich nach 5 Metern nichts mehr zum messen :( Zu Assambler ich habe mal in der Abendschule einen
data) { // aktuelles RS ermitteln char rs=PORTD; rs&=4; // High-Teil senden char tmp=data; tmp&=0xf0; tmp|=rs; PORTD=tmp; // Schreibsignal sbi(PORTD,3); cbi(PORTD,3); // Low-Teil senden tmp=data; tmp&=0x0f; tmp*=16; tmp|=rs; PORTD=tmp;
-
Thread
AVR: unsigned 24 bit auf 3 Ports verteilen
begin of PWM PORTD = tmp.ary[0] | 0x0F; // PD0-3 no change PORTC = tmp.ary[1]; PORTB = tmp.ary[2] | 0xF0; // PB4-7 no change PORTA = tmp.ary[3]; pwm_cnt++; slow_cnt++;
refresh } } else { // clear ports PORTD &= (tmp.ary[0] | 0x0F); PORTC &= tmp.ary[1]; PORTB &= tmp.ary[2] | 0xF0; PORTA &= tmp.ary[3]; if (pwm_cnt == pwm_cnt_max) {
-
Thread
AVR 2313 Komparator
= 0; i < j; i++) 30 uart_send(buf[i]); 31 } 32 33 34 35 int main(void) 36 { 37 unsigned char tmp; 38 39 DDRB = 0x00; // PORT B Eingang 40 DDRB |= (1<<PINB3); // PINB3 als AUSGANG 41 42 ACSR = 0x00; // Komparator
53 { 54 // ACO ist gesetzt wenn 2. Komp. Wert groesser 55 tmp = (ACSR & (1 << ACO)); 56 57 if (tmp > 0) 58 uart_send('1'); 59 else 60 uart_send('0'); 61 62 if (tmp > 0)
-
Thread
Brute Force mit dem Arduino
[c] int16_t zahl; uint8_t ziffer[4]; for( zahl = 0; zahl < 10000; zahl++ ){ unit16_t tmp = zahl; for( int8_t i = 3; i >= 0, i-- ){ ziffer[i] = tmp % 10; tmp /= 10; // mache was mit den 4 Ziffern } } [/c]
auf: [c] int16_t zahl; uint8_t ziffer[4]; for( zahl = 0; zahl < 10000; zahl++ ){ unit16_t tmp = zahl; for( int8_t i = 3; i >= 0, i-- ){ ziffer[i] = tmp % 10; tmp /= 10; switch(tmp): case 1: SendIRCode1(); break; case
-
Thread
schreiben von neg Zahlen auf LCD
Hi, schau mal hier: [c] static unsigned char tmp_temp[4]; .... signed int vh= tmp_temp[i]; [/c] vh ist +-15Bit breit und tmp_temp ist 8Bit breit, passt also naht los in vh rein! versuch mal folgendes: [c] signed int vh= (signed char)tmp_temp[i]; [/c] jetzt ist der Inghalt von tmp_temp nur noch 7Bit breit und kann auch negative Werte darstellen. Mach dir bei sowas DebugMsg rein, dann hättest du gesehen das tmp_temp Werte aufweisst die größer 7Bit sind!!! Stephan
-
Thread
Mikrokontroller SMS versenden
Sainsmart Siemens TC35
tmp[i-anf] = tmp[i]; i++; } tmp[i-anf] = 0; //OK while (get_GSM((char*)&tmp2, 3) == 0) {//auf Bestätigung warten ; } if (strcmp_P(tmp2 , OK) != 0) {return 0;}
-
Thread
Problem mit Kompass Achsen (Mega644p + HMC5883L)
0; } tmp = i2c_write(0x00); if(tmp!=0) { i2c_stop(); return 0; } i2c_stop(); return 1; } unsigned char compass_get_axis(int * x,int * y, int * z) { unsigned char tmp; tmp = i2c_start(COMPASS_WRITE); if(tmp!=0) { i2c_stop(); return 0; } tmp = i2c_write(0x03); if(tmp!=0) { i2c_stop(); return 0; } tmp =i2c_rep_start(COMPASS_READ); if(tmp!=0) { i2c_stop
-
Thread
HyperBus Ideen
So, ... es baut nicht. [Route 35-54] Net: HyperRAM_RWDS_IOBUF_inst/O is not completely routed. [Route 35-7] Design has 1 unroutable pin, potentially caused by placement issues. Ja was ist das? Nun, beim HyperBus ist es so, dass
; else Dout_zd_tmp=Mem[Address][15:8]; end else // reg Dout_zd_tmp = Config_reg[15:8]; end else
-
Thread
hsv nach rgb für 12Bit
tmp16 = (uint16_t)(tmp32 >> 12); // v * ans tmp32 = MAT_MULU32(v, tmp16); //von 24 auf 12 bit skalieren) q = (uint16_t)(tmp32
= 24 bit, // von 24 auf 12bit skalieren tmp16 = (uint16_t)(tmp32 >> 12); // V_12 * ans_12 tmp32 = MAT_MULU32(v, tmp16); //von 24 auf 12 bit skalieren) t = (uint16_t)(tmp32 >> 12); //top max = 12
-
Thread
ATmega6490 - Ansteuerung passives Display
deaktiviert. LCD Enable ist aktiv. Die Segementanzahl beträgt LCDPM3 LCDPM2 LCDPM1 LCDPM0 -> 1100, also 35. Benütze ich darauffolgend die Befehle ldi tmp, 0b00000001 sts LCDDR0, tmp // für COM0 und durch tmp SEG000 sts LCDDR5, tmp // für COM1 und durch tmp SEG100
bestimmten Intensität aktiviert. Benütze ich darauffolgend die Befehle ldi tmp, 0b00000001 sts LCDDR0, tmp // für COM0 und durch tmp SEG000 sts LCDDR6, tmp // für COM1 und durch tmp SEG108 sind die vorherigen zwei Segmente und zwei neue Segmente aktiviert
-
Thread
Schaltung korrekt für LED Fader mit ATMega32?!
} void pwm_up_down (const uint16_t pwm_table[], int16_t size, uint16_t delay) { int16_t tmp; for (tmp = 0; tmp < size; tmp++) { OCR1A = pgm_read_word (& pwm_table[tmp]); my_delay (delay); } for (tmp = size-1; tmp >= 0; tmp--) { OCR1A
Schritt void pwm_up_down (const uint16_t pwm_table[], int16_t size, uint16_t delay) { int16_t tmp; for (tmp = 0; tmp < size; tmp++) { OCR1A = pgm_read_word (& pwm_table[tmp]); my_delay (delay); } for (tmp = size-1; tmp >= 0; tmp--) { OCR1A
-
Thread
Atmega 8 Led fading
deinen gesamten Code. Ich bin kein C-Profi, aber ich denke hier fehlt was. 2. In fade out: > for(tmp = 31; tmp>=0; tmp++) { soll wohl heißen tmp--
überarbeitet, ihr findet ihn im Anhang. Kann es vieleicht an der Endlosschleife liegen?: [c]for(tmp = 31; tmp>=0; tmp++) { OCR2 = pgm_read_word(pwmtable_8+tmp); _delay_ms(50); }[/c] Oder an [c]#define F_CPU=8000000UL[/c] weil es mit = ist? Oder weil Code::Blocks vieleicht
-
Thread
MPU6050 - Raw-, gravity- and bodyacceleration
(&gravity, &q); mpu.dmpGetYawPitchRoll(ypr, &q, &gravity); tmp = tmp + String(ypr[0] * 180/M_PI) + " " + String(ypr[1] * 180/M_PI) + " " + String(ypr[2] * 180/M_PI) + " "; mpu.dmpGetLinearAccel(&aaReal, &aa, &gravity); tmp = tmp + String(aaReal.x) + " " + String(aaReal.y) + " " + String(aaReal.z) + "\r\n"; Serial.print(tmp); client.print(tmp); [/c] Der Overflow hat eindeutig etwas mit dem Senden (client.print(tmp)) zu tun, wenn ich es auskommentiere bekomme ich keinen Overflow. Ich denke mal das Problem
-
Thread
Temperatursensoren
insbesondere integrierte Sensoren) liegt etliche Größenordnungen darüber (z.B. T90 im Ölbad/Wasserbad beim TMP35 >60s, PT100 bis herunter auf 0.1s, Thermoelemente bis in den ms und us-Bereich)
"So ein LM35 st sicher billliger, hat aber nicht so eine genaue Linearität, oder?" Du schmeisst da Genauigkeit und Linearität in einen Topf. Ein LM35 hat eine sehr gute Linearität, aber eine schlechte Absolutgenauigkeit
-
Thread
Hofstadters Folgen in C
- Q( %d ) )\n", n, n - 1 ); Indent( Level ); printf( "Dazu brauche ich Q(%d)\n", n - 1 ); Tmp = Q( n - 1, Level + 1 ); Indent( Level ); printf( "Q(%d) ergibt also %d\n", n - 1, Tmp ); Indent( Level ); printf( "Und jetzt Q( %d - %d ) = Q(%d)\n", n, Tmp, n - Tmp ); Sum1 = Q( n -
( Level ); printf( "Dazu brauche ich Q(%d)\n", n - 2 ); Tmp = Q( n - 2, Level + 1 ); Indent( Level ); printf( "Q(%d) ergibt also %d\n", n - 2, Tmp ); Indent( Level ); printf( "Und jetzt Q( %d - %d ) = Q(%d)\n", n, Tmp, n - Tmp ); Sum2 = Q( n -
-
Thread
Thoshiba TMP80C35AP-6 Senden und Empfangen
Hallo, Kann mir jemand bei diesem Microcontroller (TMP80C35AP-6) helfen, ich hab auch das Datenblatt gefunden: http://pdf1.alldatasheet.com/datasheet-pdf/view/32520/TOSHIBA/TMP80C35AP-6.html Von RxD und TxD steht da nichts, wie soll ich da mein Asemblercode
-
Thread
Wie lange prellt ein Taster in der Regel?
Zeitabstand von etwa 10ms: [pre] Tastenabfrage: ;Entprell-Algorithmus geklaut bei Peter Dannegger... in tmp,tap ;Tastenport einlesen (gedrückt=L) com tmp ;invertieren (gedrückt=H) andi tmp,alltast ;ungenutzte Bits ausblenden eor tmp,tas ;nur Änderungen werden H and tz0,
;H-Bit zählen 0,2,->tz1 toggeln and tmp,tz0 ;Änderungen nur dann erhalten, wenn im Prellzähler and tmp,tz1 ;beide Bits gesetzt sind (Zählerstand 3) eor tas,tmp ;erhaltene Änderungen toggeln alten (gültigen) Tastenstatus
-
Thread
Zeitmessung mit Timer2 asynchron
Gewicht. Diese Rechnung hab ich überhaupt nicht durchschaut.... new_round=0; { time = tmp_rev*64+curr_TC-oldTC; loc_tmp= 2160; loc_tmp= 72*loc_tmp; loc_tmp/=time; veloc=(loc_tmp+2)/5; //km per hour, rounding included } oldTC=curr_TC; //remember
oldTC:50 TC:30 300 Revs:5 oldTC:30 TC:10 300 Revs:4 oldTC:10 TC:54 301 Revs:5 oldTC:54 TC:35
-
Thread
Basic-Interpreter auf einem AVR
------------------------------------------*/ static void jump_linenum(int linenum) { int tmp; for(tmp=0;tmp < goto_list_ptr;tmp++) { if(goto_lists[tmp].line==linenum) { jump_to_prog_text_pointer(goto_lists[tmp].next_line_ptr); return; } } tokenizer_init(program_ptr
0.00 10000 0.00 220.87 gosub_statement 0.00 0.01 0.00 10000 0.00 55.35 jump_linenum 0.00 0.01 0.00 10000 0.00 275.87 print_statement 0.00 0.01 0.00 10000 0.00 110.35 return_statement 0.00 0.01 0.00 101 0.00
-
Thread
CRC berechnen - Wo ist der Fehler?
Tmp; /* c */ Tmp = New[i] >> 5; /* d */ Bcc_Lo = Bcc_Hi; /* e */ Bcc_Hi = New[i] ^ Tmp; /* f */ Tmp = New[i] << 3; /* g */ Bcc_Lo ^= Tmp; /* h */ Tmp = New[i] >> 4; /* i */ Bcc_Lo ^= Tmp; /* j */ } CRC_L = ~Bcc_Lo; /* 3 */ CRC_H = ~Bcc_Hi; /
-
Thread
Assembler und gcc
Ziemlich exakt, was du angedeutet hast: uint8_t *foo(uint16_t len, uint8_t *buffer) { uint8_t *tmp = buffer; while(tmp != buffer+len ){ *tmp++ = PINB; } return buffer; } [/c] [avrasm] foo: movw r18,r22; return-wert sichern add r18,r24 adc r19,r25 cp r22,r18 cpc r23
buf) { uint8_t num = 100; asm volatile ("0:" "\n\t" "in __tmp_reg__, %[pins]" "\n\t" "st %a[ptr]+, __tmp_reg__" "\n\t" "dec %[num]" "\n\t" "brne 0b" : [ptr] "+e" (buf) : [num] "r" (
-
Thread
Schnelle Temperaturmessung
mal die von TI angeschaut? TMP100 und TMP120 I2C oder SPI bus
aus dem Datenblatt des TMP100 Auflösung Conversion Time 9 Bits (0.5°C) 40ms 10 Bits (0.25°C ) 80ms 11 Bits (0.125°C) 160ms 12 Bits (0.0625°C) 320ms
-
Thread
Multiplikation mit 2,56
danach einfach die Nibbles=Digits extrahieren, ein Komma reinschmuggeln und anzeigen: uint_16t tmp; display('0'+ (tmp=tabelle[zahl])/4096); display(','); display('0'+((tmp/256)&15)); display('0'| (tmp/ 16)&15 );//bei | statt + eine Klammer weniger notwendig display('0'| tmp &15 ); Da
0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9, 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7}; display('0'| (tmp=tab1[zahl])/16384); display('0'| (tmp2=tab2[tmp/128])/16); display('0'| tmp2 &15); display('0'| (tmp2=tab2[tmp&127])/16); display('0'| tmp2 &15); tab1 ist etwas komplizierter, mache ich später
-
Thread
ATxmega128a1 und RFM70 Problem.
CMD_WRITE_REG | RFM70_REG_RX_ADDR_P0, adr, sizeof(adr)); // set static or dynamic payload uint8_t tmp; tmp = readRegVal(RFM70_REG_DYNPD); if(pltype == TX_DPL) // dynamic tmp |= 1; else tmp &= ~(1 << 0); writeRegVal(RFM70_CMD_WRITE_REG | RFM70_REG_DYNPD, tmp); } uint8_
CMD_WRITE_REG | RFM70_REG_RX_ADDR_P0, adr, sizeof(adr)); // set static or dynamic payload uint8_t tmp; tmp = readRegVal(RFM70_REG_DYNPD); if(pltype == TX_DPL) // dynamic tmp |= 1; else tmp &= ~(1 << 0); writeRegVal(RFM70_CMD_WRITE_REG | RFM70_REG_DYNPD, tmp); } uint8_
-
Thread
LED Fading Atmega32
clear clk setting TCCR1B |= 4; // precaler 256 -> ~122 Hz PWM frequency for(tmp=0; tmp<=3; tmp++){ OCR1A = pgm_read_word(pwmtable_8A+tmp); my_delay(delay); } for(tmp=3; tmp>=0; tmp--){ OCR1A = pgm_read_word(pwmtable_8A+tmp); my_delay(delay
clear clk setting TCCR1B |= 4; // precaler 256 -> ~122 Hz PWM frequency for(tmp=0; tmp<=7; tmp++){ OCR1A = pgm_read_word(pwmtable_8B+tmp); my_delay(delay); }; for(tmp=7; tmp>=0; tmp--){ OCR1A = pgm_read_word(pwmtable_8B+tmp); my_delay(delay