-
Thread
Interrupts ausscalten
Ich hab das so gemacht: ISR(USART_RX_vect) { c = UDR0; tmp = 3; for( i = 1; i; i *= 2 ) { Array_Servo1[tmp] = (c&i) ? 54 : 35; tmp += 2; } while(!(UCSR0A & 1<<RXC0)){} c = UDR0; tmp2 = 3; for( i = 1; i; i *= 2 ) { Array_Servo2[tmp2] = (c&i) ? 54 : 35; tmp2 += 2; } } Hab da das Problem dass es nur klappt wenn ich Daten vom PC
-
Thread
MEGA32 - ADC defekt ?
----------------------------------------- void GetTemperatur(unsigned char Start) { signed int tmp_int; tmp_int = read_adc(1); if(Start) AussenTemperatur = tmp_int; if(PollingMinute) { if (AussenTemperatur > tmp_int) AussenTemperatur--; else if (AussenTemperatur < tmp_int) AussenTemperatur++; PollingMinute = 0; } tmp_int = read_adc(2); if (KesselTemperatur > tmp_int) KesselTemperatur--; else if (KesselTemperatur < tmp_int) KesselTemperatur++; if(Start) KesselTemperatur = tmp_int; }
-
Thread
UART&Timer Interrupt
tmp2 = array2; for( i = 1; i; i *= 2 ) *(tmp2++) = (c&i) ? 54 : 35; Array_Servo2[3] = array2[0]; Array_Servo2[5] = array2[1]; Array_Servo2[7] = array2
][*tmp] = (c&i) ? 54 : 35; tmp += 2; } state = STATE_IDLE; heißen. Also noch die Sternchen davor?
-
Thread
Was gibt es an schnellen Temperatursensoren?
www.BetaTherm.com Miniaturized thermistors - Minimum OD: 0.35mm Conrad C619/10K/J60 SMD 603
Beim DS1820 dürfte die T90 in unbewegten Gasen in einer ähnlichen Größenordnung liegen, wie beim TMP3x d.h. >1 min. Wirklich schnell wäre z.B. 0.08mm Thermoausgleichsleitung (AWG 40) bei der einfach die Drähte zusammengeschweißt sind.
-
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
Temperatur 0,1°C Auflösung
...ist ja grade der unterschied zwischen aufloesung und genauigkeit. 35 36 37 ,,,,,, 35 36 37 ,,,,,, bei hoher aufloesung kann man kleine unterrschiede feststellen, bei hoher genauigkeit kann man die position genau bestimmen
Peter Deine Interpretation gleicht meiner. Es gibt übrigens auch einen netten I2C-Sensor von TI: TMP100 / TMP101.
-
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
gcc erfindet befehle?
4 __SP_H__ = 0x3e 5 __SP_L__ = 0x3d 6 __tmp_reg__ = 0 7 __zero_reg__ = 1 8 .global __do_copy_data 9 .global __do_clear_bss 17 .Ltext0: 18 .global
in r18,85-0x20 33 000e 282B or r18,r24 34 0010 2062 ori r18,lo8(32) 35 0012 25BF out 85-0x20,r18 36 /* epilogue: frame size=0 */ 37 0014 0895 ret 38 /* epilogue end (size=1) */ 39 /* function
-
Thread
ADC Kanalwechsel Problem - Procyon-Avrlib
(measuredVoltage); } float getLM35MeasuredTemperature(){ float LM35MeasuredVoltage = getLM35MeasuredVoltage(); float measuredTemperature = LM35MeasuredVoltage * DIRECTLY_PROPORTIONAL_FACTOR; return(measuredTemperature)
LM35_ADC_CHANNEL = 0
-
Thread
16x PWM mit ATmega8 + I2C / TWI
ldi XL, low(0x0060) besser wäre: ldi XH, high(0x0060) ldi XL, low(0x0060) ------ ldi tmp1, 0b00000010 ; Timer 0 out TCCR0, tmp1 ; Prescaler 8 besser wäre: ldi tmp1, 1<<.... ; Timer 0 out TCCR0, tmp1 ; Prescaler 8 ------- Bei "Interruptroutinen" würde ich sicherheitshalber
dann auch ALT: [avrasm] TWICLR: ; TWINT loeschen, wieder empfangsbereit gehen ;ldi tmp1, (1<<TWINT)|(1<<TWEA) ;out TWCR, tmp1 [/avrasm] NEU: [avrasm] ldi temp, 1<<TWINT|1<<TWEA|1<<TWEN|1<<TWIE [/avrasm] Gruß Jonas
-
Thread
Drehimpulsgeber-Abfrage über Interrupts
holen sprintf(tmp,"%02bx",uhr.dy); Print2(tmp,5,35,weiss); //geändertes Datum auf Display } while(setclk==4){ // ----------------------------------Uhrzeit //read_ext_clk_regs
59; // uhr.sec=set; //Drehimpuls holen sprintf(tmp,"%02bx",uhr.sec); Print2(tmp,5,35,weiss); //geändertes Datum auf Display } } else{ while(setclk<=1){ // ----------------------------------Uhrzeit
-
Thread
MMC/SD-Karte mit FAT16 an AVR
g4f0c785a47b1cf070839b5edec2c6f65 [2] http://www.roland-riegel.de/sd-reader/doc/group__sd__raw.html#gd4d9ff40a7ea50c65cfa47927b35b735
Variablen Namen erstellen, doch leider geht es nicht. Kann mir einer helfen? [c] [...] char tmp_name[13]; char* name = tmp_name; name[0] = ((gps_data.tag / 10) + 0x30); name[1] = ((gps_data.tag%10) + 0x30); name[2] = '.'; name[3] = ((gps_data.monat / 10) + 0x30); name[4] = ((gps_data.monat
-
Thread
winziger Webserver mit enc28j60+mega32
Die DIP-Version des ENC ist allein schon ca. 35mm lang. Dürfte bei den Ausmaßen eher schwierig werden, zumal man dann auch noch Platz auf der Unterseite verliert, wegen der durchgehenden Pads. CSD besorgt bestimmt auch die SOIC Variante, wenn man
browser, ...) Hier gibt es ein (schon etwas älteres) Flashvideo davon: http://avr.auctionant.de/tmp/avreth2_demo.htm Bye, Simon
-
Thread
Lineare PTC und NTC
du unbedingt einen R als Ausgang brauchst, gibt z.B. den Umweg über einen Digitalen Temp-Sensor (TI TMP1xx, Dallas DS1xxx), µC und digitales Poti. Aber meist genügt als Ausgangsgröße eine Spannung, dafür gibt es genug Sensoren, z.B. TMP36 oder LM34 / LM35).
folgende Funktion liefert bei mir Abweichungen von max. 0,2 Grad C ggü. einem DS1820 (im Bereich 10-35 Grad C getestet). [C] float calculate_ntc_temp(void) { float rth; float temp; // values and formula taken from datasheet at http://www.vishay.com/docs/29049/23226403.pdf // NTC type
-
Thread
Handycamera MCA-25 ansteuern - ip webcam mit mega32
hi echt spitzen projekt!!! vieleicht kann man 1-wire tmp sensoren einlesen und loggen s.h. http://www.mikrocontroller.net/forum/read-4-248219.html#new dann hätte man den perfekten wetterserver mit livecam!
achja 192.168.1.35 ist meine schwester ich weis zwar ned wie des da rein kommt aber egal
-
Thread
The Siemens S65 132x176, 65536 color display with AVR
beim HD66766 nicht, aber beim HD66773 schon. Ich find die beim HD66773 aber auch nicht. R0Bh (Seite 35) ... R0Fh (Seite 37) ...
setup SPI Interface SPCR = _BV(MSTR) | _BV(SPE) | _BV(SPR0); SPSR = 1; // double speed bit tmp=SPSR; } void lcd_write(uint8_t dat) { SPDR= dat; while (!(SPSR & _BV(SPIF))); }
-
Thread
Frage zu Optimierung
Code muss zwangsläufig langsam sein. Habe 5 Multiplikationen gesehen, deren Ergebnisse alle in <siTMP_Var64> abgelegt werden. Das produziert 2 riesige Multiplexer vor dem Multiplizierer, jeweils max. 5x32-zu-1x32. Dazu kommt noch die Statemachine mit den vielen States, die auch noch ausdekodiert
@TheMason im ersten Schritt würde ich versuchen, mal die ganzen Zeilen siTMP_Var64 <= (siOscOutput * siBQ1CofB1); ... zu ersetzen durch (Bsp.) : faktor_1 <= siOscOutput; -- faktor_1 = 32 bit Register faktor_2 <= siBQ1CofB1; -- faktor_1 = 32 bit Register Und den Multiplier
-
Thread
Handykamera MCA-25 ansteuern
durch, mache heute abend weiter ;) meine einzige 07.10 Doku: http://www.hddznet.com/FileDown/mc35/MC35jj.pdf (vorsicht, sehr langsam!) zum gucken wie die checksum berechnet wird: gsmMux für BeOS (GPL) Am aktivieren des MUX Protokolls muss die Cam scheinbar mit 460kbaud laufen ... Muss man
habe nur die generelle Beschreibung des Mux Protokolls GSM 07.10: http://www.hddznet.com/FileDown/mc35/MC35jj.pdf und dann noch nen Sony Ericcson Pdf über allgemeine AT Commads (das erste im ZIP): http://developer.sonyericsson.com/getDocument.do?docId=65054 Ein datenblatt für die Kamera habe
-
Thread
Zähler
31: 0E9, 00111 01001 32: 0EA, 00111 01010 33: 0EC, 00111 01100 34: 0F1, 00111 10001 35: 0F2, 00111 10010 36: 0F4, 00111 10100 37: 0F8, 00111 11000 38: 10F, 01000 01111 39: 117, 01000 10111 3A: 11B, 01000 11011 3B: 11D, 01000 11101 3C: 11E, 01000 11110 3D: 127,
set 0 val set 0 rept 1024 eins set 0 tmp set val rept 9 eins set eins + (tmp and 1) tmp set tmp shr 1 endm if( eins = 5 ) $
-
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
Delay -Problem
Wenn_ F_CPU 1 MHz beträgt. Du aber arbeitest mit 7.3728 MHz, also resultieren aus der Division etwa 35 msec.
about decreased resolution. */ void _delay_ms(double __ms) { uint16_t __ticks; double __tmp = ((F_CPU) / 4e3) * __ms; if (__tmp < 1.0) __ticks = 1; else if (__tmp > 65535) { // __ticks = requested delay in 1/10 ms __ticks = (uint16_t) (__ms * 10.0); while(__ticks
-
Thread
LCD Controller für 640x480 LCD mit mega8515
nicht konstant, sondern ändert sich mit der Last (=Bildinhalt). Da nehm ich lieber einen MC34063 für 35Cent und habe dann eine konstante Spannung.
haben folgende Variablen ? .def L_COL = r21 .def H_COL = r22 .def COL = r23 .def TmpCount = r24
-
Thread
Erase Kommando MMC Karte
; CMD33[3] = ((addrz & 0x0000FF00) >>8 ); //Sendet Commando an MMC/SD-Karte if ((tmp=sd_write_command (CMD32)) != 0) { sd_ende(); //printf("cmd32: %d\r\n",tmp); return(tmp); } sd_ende(); if ((tmp=sd_write_command (CMD33)) != 0) { sd_ende(); //printf("cmd33: %d\r\n",tmp); return(tmp); } sd_ende(); if ((tmp=sd_write_command (CMD38)) != 0) { sd_ende(); //printf("cmd38: %d\r\n",tmp); return
-
Thread
Linearisierung NTC
Konstantstromquelle (zB 1mA)mit der du den NTC versorgst. Am schnellsten gehts natürlich mit dem LM35 mit linearer Ausgangsspannung / Grad C. Aber es fehlen noch viele Details in deinen Angaben sodaß man nicht viel sagen kann (Genaugikeit, Messbereich usw.) SG Josef
TMP100 von TI. Kostet auch nicht die Welt und ist bequem per I2C auszulesen. Und präzise genug ist er locker (irgendwas um 0,25°C Genauigkeit IIRC). Da sparst du dir den ganzen Analog-Kram ...
-
Thread
Honeywell Rondostat HR20E per AVR steuern und konfigurieren
10101110 11011111 01000000 00000100 00001100 40% 0000 10101110 00000100 00110101 00000011 01011100 35% 0000 10101110 11011111 01000000 00000100 00001100 40% also 4x Null, dann 5 Bytes. Oder 11 Nibbles. Beim Hygrosensor ist die Sache recht einfach: Die Zahlen werden BCD-codiert übertragen: Byte3
+uint16_t ADC_Get_Temp_Deg(void) // Get Temperature in 1/100 Deg �C { uint16_t tmp; tmp = 10 + (ADC_Val_Temp/100); @@ -123,7 +123,7 @@ * \note * - measurment has been performed before using \ref ADC_Measure_Temp ***************************************************
-
Thread
ATTiny10/11/12
entscheiden wir uns für Vorteiler 1024 und Zählumfang 63, der Startwert beträgt demnach 256-63. ldi tmp,256-63 ;Differenz bis zum Überlauf mov tsw,tmp ;in Timer-Startwert (Umweg über tmp, weil tsw als unteres Register kein LDI kann) out tcnt0,tsw </Zitat> ich habe die 256-63
verstanden? Nur noch so eine theoretische Frage . Wäre diese Schreibweise auch möglich? ldi tmp,(1<<aden)|(1<<adsc)|(1<<adfr)+0b00000111 statt ldi tmp,(1<<aden)|(1<<adsc)|(1<<adfr)+7 Gruß, Stephan
-
Thread
DS1820, DS18B20 in C
DS_CMD_READ); return ow_read_word(); } void DS18B20_getTempAsText(int16_t t,char *s) { char tmp[10]; int16_t t1=t/16; int16_t t2=abs(t % 16); t2*=10; t2/=16; itoa(t1,s,10); strcat(s,","); itoa(t2,tmp,10); strcat(s,tmp); tmp[0]=(char)223; tmp[1]='C'; tmp[2]='\0'; strcat(s,tmp); } [/c] gruß cyblord
-
Thread
Nokia 6100 Ansteuerung in C
übelst empfindlich auf überspannung zu sein. ich verwende einen 3,3V festspannungsregler. der bringt 3,35V. die 50mV scheinen schon zuviel zu sein. ich hab jetzt einen 180Ohm/4,7Kohm spannungsteiler davor gesetzt sodass die spannung 3,15V ist. nun scheint es einwandfrei zu funktionieren, bisher aber nur
r29 29 #define r30 30 #define r31 31 #ifndef __tmp_reg__ #define __tmp_reg__ r0 #endif #ifndef __zero_reg__ #define __zero_reg__ r1 #endif Gruß hagen
-
Thread
Drehgeber auslesen
---- innerhalb der Timer Routinte ---- static int8_t enc_last = 0x01; int8_t i; uint8_t tmp; i=0; // digiswitch polling tmp=PINE; if( (tmp & _BV(PINE4)) ) i = 1; if( (tmp & _BV(PINE3)) ) i ^= 3; // convert gray to binary 00->11, 01->10 tmp=i;
mußt also die Auslesefunktion so ändern: [C] signed char rot_getdelta(void) { signed char tmp; cli(); tmp = rot_delta; rot_delta = tmp & 1; // bit 0 needed for debounce ! sei(); return tmp >> 1; // pulse / 2 } [/C] Peter
-
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
ständig interupts
tmp, High(RAMEND) out $3E, tmp ldi tmp, Low(RAMEND) out $3D, tmp in tmp, $35 ori tmp, 0b00000011 out $35, tmp in tmp, $3B ori tmp, 0b01000000 out $3B, tmp in tmp, $39
solltest Du umbenennen in Main und am Ende darf kein reti stehen sondern rcall Main. Initial: ldi tmp, High(RAMEND) out $3E, tmp ldi tmp, Low(RAMEND) out $3D, tmp in tmp, $35 ori tmp, 0b00000011 out $35, tmp in tmp, $3B ori tmp, 0b01000000 out $3B, tmp in tmp, $39 ori tmp, 0b01000000 out $39, tmp ldi