-
Thread
MMC SD library FAT16 FAT32 read write
,tmp,10); uputs(tmp); uputc(' '); utoa(fat.secPerClust,tmp,10); uputs(tmp); } [/c] Jetzt müsste wenn alles funktioniert, "Boot...2 2" zu sehen sein. Wenn dem so ist muss
{ sprintf(DATA_INFO.DATA[t],"%s",tmp_buffer); } } count=0; c=ffread(); while( (c!='\n') ) { tmp_buffer[count]=c; c=ffread(); count++; } count--; tmp_buffer[count]='\0'
-
Thread
Temperaturüberwachung mit NTC
Christian, freut mich dass der Fehler heraus kam; -) Ich persoehnlich bevorzuge RTDs oder LM34/LM35 neben einigen digitalen Sensoren wie TMP101, TMP04 u.ae. bei denen man meist ohne Linearisierung auskommt. Die NTCs haben aber den Vorteil der grossen Auswahl und Miniaturisierung. Die Preise sind aber
, aber für eine normale MEssung würde ich die nicht verwenden. Am Mikrocontroler habe ich schon TMP100 von TI getestet über I2C. Ist sicher nochmal ne andere Liga wie die LM34/35, aber das funktionier auch spitze. Die LM34/35 werde ich aber auf jeden Fall mal testen. Leider fehlt mit im Moment ein
-
Thread
avr-gcc->Probleme beim 1.kopieren von struct und 2. Arrays mit Double
folgende Probleme: 1. Der Zuweisung-Operator "=" bei Strukturen funktioniert nicht. Bsp.: struct_x tmp_struct_x; struct_x array_y[0] = tmp_struct_x; Der Inhalt von array_y[0] ist 0. Falls ich die einzelnen Elemente zuweise (array_y[0].a = tmp_struct_x.a), funktioniert das Ganze bzw. falls ich alternativ
12.67, 12.81, 12.95, 13.09, 13.23, 13.37, 13.51, 13.65, 13.79, 13.93, 14.07, 14.21, 14.35, 14.49 }; double calcTemp(double val) { double y=-1.0; int i; for (i=0;i<129;i++) { if ( (val>=f_thermo_r[i]) && (val<f_thermo_r[i+1]) ) { y = i*10.0 + 10.0*(val-f_thermo_r
-
Thread
avr-gcc: 3.4.6 contra 4.3.0
4.2.4/gcc/config/avr/libgcc.S:282: Error: illegal opcode movw for mcu avr3 make[3]: *** [libgcc/avr35/_mulsi3.o] Fehler 1 make[3]: Leaving directory `~/gcc-4.2.4-obj-avr/gcc' [/pre] *xgcc wrote* [pre]~/gcc-4.2.4-obj-avr> ./gcc/xgcc -Bgcc -v Reading specs from gcc/specs Target: avr Configured
Ich glaube, die avr35-Geschichte ist irgendein Ding, wo eine bestimmte Version der binutils nur zu einer bestimmten GCC-Version passt. Genau habe ich das aber auch noch nicht recherchiert. Sorry, keine Ahnung, welcher
-
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
Sensor AD590
Einfacher wäre es, einen Sensor mit Spannungsoutput zu nehmen. Z.B. TMP35/36/37, auch von Analog.
-
Thread
LCD aus GCC Tutorial läuft nicht mit AVR Studio
here lcd-routines.o: In function `lcd_command': D:\Elektronik\AVR\AVR_LCD\default/../lcd-routines.c:35: multiple definition of `lcd_command' AVR_LCD.o:D:\Elektronik\AVR\AVR_LCD\default/../lcd-routines.c:35: first defined here lcd-routines.o: In function `lcd_data': D:\Elektronik\AVR\AVR_LCD\default
Compiler, daher ist die erneute Definition im headerfile unnötig. >../lcd-routines.c:126: warning: 'tmp' may be used uninitialized in this function tmp wird nach Ansicht des Compilers vor seiner ersten Verwendung nicht initialisiert. Hier irrt der gcc allerdings öfter mal. Bisher waren das alles
-
Thread
CRC-16: Ergebnis der Summenbildung
0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1, 0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738, 0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70, 0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7, 0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed
0x0f78}; Die eigtl. Bildung geschieht mit folgender Codezeile: crc = (crc >> 8) ^ crc16_table[tmp ^ (crc & 0xff)]; Hat jemand eine Anmerkung für mich. DANKE. Gibts vielleicht sogar eine Freeware, wo ich solche Daten testen kann? Nochmal DANKE.
-
Thread
char in Float-Wert umwanden und auf LCD ausgeben
also bei 35°C sind es 0x46 bis 0x49 bei 35,1°C sind es 0xA0 bis 0xA4 bei 35,2°C sind es 0x0xA5 bis 0xAA und so weiter es sind immer 4 schritte je 0,1°C kann man das vernünftig umrechnen?
Markus Spitznagel wrote: > also bei 35°C sind es 0x46 bis 0x49 > bei 35,1°C sind es 0xA0 bis 0xA4 > bei 35,2°C sind es 0x0xA5 bis 0xAA > und so weiter > es sind immer 4 schritte je 0,1°C Und der Bereich 4A bis 9F? Und
-
Thread
AVR-Bootloader mit Verschlüsselung
AVRootloader.inc" ;.listmac .list .org BootStart init: cli ;----------------------------- .def tmp = r28 .def tmp1 = r29 ldi tmp, $00 out DDRA, tmp ;PORTA als Eingang ldi tmp, 0b11111100 out PORTA, tmp ;PullUp in tmp, PINA andi tmp, 0b10001000 ldi tmp1, 0b10001000 eor tmp, Tmp1 ldi tmp1, 0 cpi tmp, 0b10001000 brne NoButtons ldi tmp1, 1 ;wenn gedruckt, immer auf PC warten (tmp1=1) NoButtons: ;
-
Thread
Analog Devices TMP04 Temperatursensor Testprogramm
Im Anhang ist ein kurzes Programm zum Betrieb des Analog Devices TMP03/04 Temperatursensors und moechte es gerne der Codesammlung hinzufuegen. Der TMP04 ist ein interesannter relativ neuer Temperatursensor mit Rechteckausgang. Der Temperaturwert wird aus dem Verhaeltnis von T1 zu T2 gebildet und wird durch Taktdrift des TMP04 oder des Mikros nicht nennenswert beinflusst. Die Taktfrequenz betraegt ungefaehr 35Hz. Da nur die Rechteckspannung uebertragen werden muss, laesst sich das Signal leicht mit einem Opto-Coupler
-
Thread
Inline Assembler- Bits spiegeln
etwa das raus: ;->R16: zu spiegelndes Byte ;<-R16: gespiegeltes Byte MirrorBits: push tmp ; 2 bst R16,0 ; 1 bld tmp,7 ; 1 bst R16,1 ; 1 bld tmp,6 ; 1 bst R16,2 ; 1 bld tmp,5 ; 1 bst R16,3 ; 1 bld tmp,4 ; 1 bst R16,4 ; 1 bld tmp,3 ; 1 bst R16,5 ; 1 bld tmp,2 ; 1 bst R16,6 ; 1 bld tmp,1 ; 1 bst R16,7 ; 1 bld tmp,0 ; 1 mov R16,tmp ; 1 pop tmp ; 2 ret ; 4
-
Thread
2 mal Uart beim Mega8
{ u8 in = SRXPIN; // scan rx line if( srx_mask ){ if( in & 1<<SRX ) srx_tmp |= srx_mask; srx_mask <<= 1; OCR1B += BIT_TIME; // next bit slice }else{ srx_done = 1; // mark rx data valid srx_data = srx_tmp; // store rx data TIFR = 1<
SFIOR=0x30; sfrb OSCCAL=0x31; sfrb TCNT0=0x32; sfrb TCCR0=0x33; sfrb MCUCSR=0x34; sfrb MCUCR=0x35; sfrb TWCR=0x36; sfrb SPMCR=0x37; sfrb TIFR=0x38; sfrb TIMSK=0x39; sfrb GIFR=0x3a; sfrb GICR=0x3b; sfrb SPL=0x3d; sfrb SPH=0x3e; sfrb SREG=0x3f; [/c] lg
-
Thread
wieder einmal "undifined reference"
data */ "mov __tmp_reg__,%B0" "\n\t" "swap __tmp_reg__" "\n\t" /* swap(crc.hi ^ data) */ /* Calculate the ret.lo of the CRC. */ "mov %1,__tmp_reg__" "\n\t" "andi %1,0x0f
__ret; __asm__ __volatile__ ( "eor %A0,%1" "\n\t" "mov __tmp_reg__,%A0" "\n\t" "swap %A0" "\n\t" "andi %A0,0xf0" "\n\t" "eor %A0,__tmp_reg__" "\n\t" "mov __tmp_reg__,%B0" "\n\t" "mov
-
Thread
Frage zur C Syntax
ACCU_SIZE / F_DDS = 107,3741824 // ACCU_SIZE * 2^25 / F_DDS = 3602879702 tmp = freq * 3602879702ULL; tmp >>= 25; return tmp; } #endif #if (sel==2) uint32_t ftw_float_1 (uint32_t freq) { float tmp; tmp = (float)freq * ACCU_SIZE / F_DDS; return tmp;
EBFFFFF8 BL ?C?QMUL?A ; Targ=0x0 ; ?C?QMUL?A 0000001C E1A04000 MOV R4,R0 ; tmp 00000020 E1A05001 MOV R5,R1 ; tmp 00000024 ---- Variable 'tmp' assigned to Register 'R4/R5' ---- 35: tmp >>= 25; 00000024 E1A00385 MOV R0,R5,LSL #7 00000028 E1A04CA4
-
Thread
Webserver ATmega32/644DIP ENC28J60
schinden: void enc28j60_send_packet(unsigned int len, unsigned char *buffer) { unsigned int tmp; //still sending ? //wait max 50*10 = 500ms: for(tmp=0; tmp<500; tmp++){ if (!(enc28j60_read_address(ENC28J60_REG_ECON1) & (1<<ENC28J60_BIT_TXRTS))){ //send finished -> tx packet
zum Test ganz Primitiv eingebunden: [c]if(strcasestr_P((char*)ð_buffer[a],PSTR("LED3=3"))!=0){tmp |=(1<<PA2);} if(strcasestr_P((char*)ð_buffer[a],PSTR("LED4=4"))!=0){tmp |=(1<<PA3);} if(strcasestr_P((char*)ð_buffer[a],PSTR("LED5=5"))!=0){tmp |=(1<<PA4);} if
-
Thread
Bluetoothmodul BTM-222
wget -q -O/dev/null "http://192.168.0.11/web/message?text=testtest&type=2&timeout=5" ) >> /tmp/uart.log 2>&1 fi done [/c]
PIN CODE ATQ=0, SEND RESULT CODE ATX=1, ALWAYS CHECK '+++' Die Module haben die Firmware 4.35. Vielen Dank für die Unterstüzung. Gruß Benjamin
-
Thread
suche PIC8259 Derivat für 186 CPU
Der uralte 8259 stammt von intel, passend für den 8080 bzw. 8085. Das Ding ist gut und gerne 30-35 Jahre alt, damals noch NMOS (kleine Heizplatten). Trotzdem hat des die Fa. IBM geschafft, diese uralte Teil x Jahre später in den IBM-PC reinzusetzen (mit dem 8088 damals beginnend). Modernere
weiss ich nicht, wer den überhaupt noch herstellt... Zu kaufen war der als i8259 M8259 P8259 TMP8259 uPD71059 K580WI59 SAB8259 usw. sind alle gleich. Nur gibt es CMOS- und NMOS-Versionen sowie unterschiedlich schnelle Varianten... Grus rayelec
-
Thread
GCC 4.2.1 für AVR bauen schlägt fehl
verzichtet. Das solltest du besser nicht. ;-) Wenn du schon einen GCC baust, der die avr25- und avr35-Architektur kennt, dann brauchst du natürlich auch binutils, die das verstehen.
Jörg Wunsch wrote: > Wenn du schon einen GCC baust, der die avr25- und avr35-Architektur > kennt, dann brauchst du natürlich auch binutils, die das verstehen. Also bei meinem System sind die Binutils 2.16.1cvs20060117-1 dabei. Ich habe jetzt 2.17 heruntergeladen und compiliert
-
Thread
Prozessorauslastung bei SPI
data tmp = *data++; while(!(SPSR & (1<<SPIF))); SPDR = tmp; } // release CS ENC28J60_CONTROL_PORT |= (1<<ENC28J60_CONTROL_CS); } >Ich denke mal die Warte-Zeit auf das SPIF kann ich nicht
herauszutakten. Das ganze hat für den kompletten Aufruf(einsprung+push), Bearbung und Beenden(pop) etwa 35Mikrosekunden gedauert. Das Ganze auf nem mega128@16MHz.
-
Thread
Windows und Linux lesen SD Karte falsch
unsigned char test[512]; for (int i=0;i<sizeof(test);i++) { test[i]=0; } unsigned int tmp; mmc_read_csd (Buffer); //Ausgabe des Root Directory unsigned int Clustervar; unsigned char Dir_Attrib = 0; unsigned long Size = 0; for (char a = 1;a < 240;a++) { Clustervar
am Ende des ersten Sektors gucken oder? Im ersten Sektor steht folgendes: EB 3C 90 4D 53 44 4F 53 35 2E 30 00 02 04 08 00 02 00 02 00 00 F8 F4 00 3F 00 FF 00 20 00 00 00 E0 D1 03 00 00 00 29 E7 89 A1 60 4E 4F 20 4E 41 4D 45 20 20 20 20 46 41 54 31 36 20 20 20 33 C9 8E D1 BC F0 7B 8E D9 B8 00
-
Thread
UART Bootloader ATtiny13 - ATmega644
isAnswerArrived) { if (answer[0] == BL_BADCOMMAND) { return CRC_STATUS.NO_CRC; } } int tmpCrc = crc; System.out.println(Integer.toHexString(tmpCrc)); send(tmpCrc & 0xff); send(tmpCrc >> 8); waitForAnswer(); i = answer[0]; switch (i) { case BL_SUCCESS: return
CRC_STATUS.CRC_OK; default: return CRC_STATUS.CRC_FAIL; } } private void get_crc(int d) { int tmpCrc = crc ^ d; for (int i = 0; i<8; i++) { if ((tmpCrc & 0x1) != 0) { tmpCrc = (tmpCrc >> 1) ^ 0xA001; } else { tmpCrc = tmpCrc >> 1; } } crc = tmpCrc
-
Thread
genaue Temperaturmessung mit ds1820
Single Dim Id1(8) As Byte Dim Id2(8) As Byte Dim Ar1(9) As Byte Dim Ar2(9) As Byte Dim I As Byte , Tmp As Byte , Tmp2 As Byte Dim Crc As Byte Dim W As Byte Declare Sub Crcit Declare Sub Crcit2 W = 1wirecount() Id1(1) = 1wsearchfirst() '
Temperatur T5: " ; T5 ; "°C" Waitms 500 Loop Sub Crcit Crc = 0 For I = 1 To 9 Tmp = Crc Xor Ar1(i) Crc = Lookup(tmp , Crc8) Next End Sub Sub Crcit2 Crc = 0 For I = 1 To 9 Tmp2 = Crc Xor Ar2(i) Crc = Lookup(tmp2 , Crc8) Next End Sub '//
-
Thread
GCC: Sehr langes C-Programm für Zielsystem PC
ist etwas größer: chef@localhost /tmp/xyz $ ls -lah gcd.o -rw-r--r-- 1 chef chef 13M Jun 29 01:27 gcd.o Dafür spuckt der Linker ein paar Fehler aus: chef@localhost /tmp/xyz $ gcc -o gcd gcd.o 2>&1 gcd.o: In function `main': gcd.c
/tmp $ date && ./gcd && date Fri Jun 29 20:45:38 CEST 2007 3.456838e+02 Fri Jun 29 20:45:38 CEST 2007 chef@localhost /tmp $
-
Thread
bidirektionale RS232 Funkbrücke mit RFM12
: Meine Version der Baudratenfunktion: [c] void rfmSetBaud( uint16_t baud ) { uint16_t tmp; //minimal baudrate with cs=0 is about 2700 if( baud < 2700 ) { tmp = (344828/(baud*8)-1); //cs=1 BR=344828/(R+1)*(1xcs*7) } else { tmp = ((344828/baud)-1); //cs=0 BR=344828/(R+1) } rfmWrtCmd(0xC600|tmp); } [/c]
-
Thread
AVR-GCC Deoptimierung
in r29,__SP_H__ 42 0008 2297 sbiw r28,2 43 000a 0FB6 in __tmp_reg__,__SREG__ 44 000c F894 cli 45 000e DEBF out __SP_H__,r29 46 0010 0FBE out __SREG__,__tmp_reg__ 47 0012 CDBF out __SP_L__,r28 48
epilogue: frame size=2 */ 59 0020 2296 adiw r28,2 60 0022 0FB6 in __tmp_reg__,__SREG__ 61 0024 F894 cli 62 0026 DEBF out __SP_H__,r29 63 0028 0FBE out __SREG__,__tmp_reg__ 64 002a CDBF out __SP_L__,r28 65 002c
-
Thread
Beispielprogramm für RFM12 433MHz Funk-Module
der C Code für den Empfänger: [c] void receive(void) { unsigned char test[1]; uint8_t tmp; rf12_rxdata(test,1); tmp = atoi(test[0]); if(tmp > 0 && tmp < 10) { einer = tmp; } } [/c] Beim Build bekomme ich diese Warnung: [c] ../main.c:106: warning: implicit
Richard B. wrote: > Hier der C Code für den Empfänger: > tmp = atoi(test[0]); atoi nimmt char* als Argument, Du gibt ihm hier aber nur ein char. So wäre es richtig: tmp = atoi(test); Dann mußt Du allerdings auch sicherstellen, daß der String mit
-
Thread
RFM12 - Funkmodul
COMPARE A Interrupt ISR( TIMER1_COMPA_vect ) { static uint8_t pwm_cnt=0; uint8_t tmp=0; OCR1A += (uint16_t)T_PWM; if (pwm_setting[0] > pwm_cnt) tmp |= (1<<0); if (pwm_setting[1] > pwm_cnt) tmp |= (1<<1); if (pwm_setting[2] > pwm_cnt) tmp |= (1<<2); if (pwm_setting[3] > pwm_cnt) tmp |= (1<<3); if (pwm_setting[4] > pwm_cnt) tmp |= (1<<4); if (pwm_setting[5] > pwm_cnt) tmp |= (1<<5); if (pwm_setting[6] > pwm_cnt) tmp |= (1<<6); if (pwm_setting[7] > pwm_cnt) tmp
-
Thread
Schwerer Bug in AVR-GCC 4.1.1 Gesperrt
berechnen kann. (zwar nicht als Konstante, aber als Immediate). [avrasm] foo: ldi r24,lo8(48) ; tmp42, sts display,r24 ; <variable>.digit, tmp42 sts display+1,r24 ; <variable>.digit, tmp42 sts display+2,r24 ; <variable>.digit, tmp42 sts display+3,r24 ; <variable>.digit, tmp42
r31,hi8(display) ; dis, /* #APP */ ;RELOAD z with dis /* #NOAPP */ ldi r24,lo8(48) ; tmp42, st Z,r24 ; <variable>.digit, tmp42 std Z+1,r24 ; <variable>.digit, tmp42 std Z+2,r24 ; <variable>.digit, tmp42 std Z+3,r24 ; <variable>.digit, tmp42 ret [/avrasm] Mit