Для
постройки нашего мини холодильника нам необходимо найти или купить
элемент Пельтье, что это такое и как работает Вы сможете прочитать ниже,
и два радиатора. Вот
этот самый элемент Пельтье, я выдрал его из сломанного компа, он там
стоял между процессором и кулером. Счистил с него старую термопасту. В
двух словах - этот элемент Пельтье при подаче на него постоянного тока
начинает работать следующим образом - одна сторона у него начинает
греться, а вторая охлаждаться, если поменять полярность источника
питания, то стороны элемента будут вести себя наоборот! Далее я взял два
массивных радиатора от ненужного усилка. Потом смазал элемент новой
термопастой, которую купил в радио магазине, и зажал элемент Пельтье
между радиаторов. Использование термопасты в данном случае обязательно...
Смотреть
Категория: Схемы » Другое
Комментариев: 0
Теги к статье: усилка, nначинает, nстоял, нашего, стороны, массивных, вести, него, выдрал, процессором, тока, работает, nэлемент, зажал, работать, подаче, Счистил, следующим, мини, наоборот, ненужного,
В период с 9 по 12 мая 2013 года, команда радиолюбителей г. Волжского Волгоградской области под позывным сигналом RC4A/p, проводит WFF-радиоэкспедицию в Природный парк "Усть-Медведицкий". Референция по программе WFF: RFF-210. По дипломной программе RDA: VG-40 (Серафимовический район Волгоградской области). Запланирована работа в телефоне и телеграфе на диапазонах 3.5, 7, 10, 14, 18, 21, 24, 28 MHz. QSL via UA4ATL (бюро или директ). 73 и 44!
нашёл старую фотовспышку "фотон" 78 года, хочу прицепить котушку но не пойму как, уже все перепробывал(радиоэлектроникой занимаюсь недавно), зарядка кондесатора не идёт, подскажите пожалуйста что да как паять, схема прилагается, спасибо Раздел: Начинающим
Здравствуйте. не могли бы Вы подсказать, как посмотреть,где именно он пишет в некорректную облать памяти. #include <stdio.h> #include <stdlib.h> #include <avr/io.h> #include <avr/pgmspace.h> #include <avr/eeprom.h> #include <avr/interrupt.h> #include <util/delay.h> #include <inttypes.h> #include "lcd_lib.h" //define R2R port #define R2RPORT PORTA #define R2RDDR DDRA //define button port and dedicated pins #define BPORT PORTD #define BPIN PIND #define BDDR DDRD #define DOWN 0//PORTD #define LEFT 1//PORTD #define START 2//PORTD #define RIGHT 3//PORTD #define UP 4//PORTD //Define Highs Speed (HS) signal output #define HSDDR DDRD #define HSPORT PORTD #define HS 5//PD5 //define eeprom addresses #define EEMODE 0 #define EEFREQ1 1 #define EEFREQ2 2 #define EEFREQ3 3 #define EEDUTY 4 #define EEINIT E2END #define RESOLUTION 0.095367431640625 #define MINFREQ 0//minimum frequency #define MAXFREQ 65534//maximum DDS frequency #define MN_No 5// number of menu items //function prototypes void delay1s(void); void Timer2_Init(void); void Timer2_Start(void); void Timer2_Stop(void); void Main_Init(void); void Menu_Update(uint8_t); void Freq_Update(void); void Timer1_Start(uint8_t); void Timer1_Stop(void); void static inline Signal_OUT(const uint8_t *, uint8_t, uint8_t, uint8_t); //adjust LCDsendChar() function for strema static int LCDsendstream(char c, FILE *stream); //----set output stream to LCD------- static FILE lcd_str = FDEV_SETUP_STREAM(LCDsendstream, NULL, _FDEV_SETUP_WRITE); //Menu Strings in flash //menu 1 const uint8_t MN100[] PROGMEM=" exp \0"; //Array of pointers to menu strings stored in flash const uint8_t *MENU[]={ MN100 //menu 1 string }; //various LCD strings const uint8_t MNON[] PROGMEM="ON \0";//ON const uint8_t MNOFF[] PROGMEM="OFF\0";//OFF const uint8_t NA[] PROGMEM=" NA \0";//Clear freq value const uint8_t CLR[] PROGMEM=" \0";//Clear freq value const uint8_t MNClrfreq[] PROGMEM=" \0";//Clear freq value const uint8_t TOEEPROM[] PROGMEM="Saving Settings\0";//saving to eeprom const uint8_t ONEMHZ[] PROGMEM=" 1MHz \0";//saving to eeprom const uint8_t welcomeln1[] PROGMEM="AVR SIGNAL\0"; const uint8_t RND[] PROGMEM=" Random\0"; //variables to control TDA7313 struct signal{ volatile uint8_t mode; //signal volatile uint8_t fr1; //Frequency [0..7] volatile uint8_t fr2; //Frequency [8..15] volatile int8_t fr3; //Frequency [16..31] volatile uint32_t freq; //frequency value volatile uint8_t flag; //if "0"generator is OFF, "1" - ON volatile uint32_t acc; //accumulator volatile uint8_t ON; volatile uint8_t HSfreq; //high speed frequency [1...4Mhz] volatile uint32_t deltafreq; //frequency step value }SG; //define signals const uint8_t expwave[] __attribute__ ((section (".MySection1")))= //exp wave { 0x00,0x09,0x12,0x1B,0x23,0x2c,0x34,0x3c,0x43,0x4B,0x52,0x59,0x60,0x67,0x6E,0x74, 0x7A,0x80,0x86,0x8C,0x91,0x97,0x9C,0xA1,0xA6,0xAA,0xAF,0xB3,0xB8,0xBC,0xC0,0xC3, 0xC7,0xCB,0xCE,0xD1,0xD4,0xD7,0xDA,0xDD,0xE0,0xE2,0xE4,0xE7,0xE9,0xEB,0xED,0xEF, 0xF0,0xF2,0xF3,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFE,0xFE,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xfe,0xfd,0xfd,0xfc,0xfc,0xfb,0xfa,0xfa, 0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf3,0xf2,0xf1,0xf0,0xee,0xed,0xec,0xea,0xe9,0xe8, 0xe6,0xe5,0xe3,0xe2,0xe0,0xdf,0xdd,0xdb,0xda,0xd8,0xd6,0xd5,0xd3,0xd1,0xd0,0xce, 0xcc,0xca,0xc8,0xc7,0xc5,0xc3,0xc1,0xbf,0xbd,0xbb,0xba,0xb8,0xb6,0xb4,0xb2,0xb0, 0xae,0xac,0xaa,0xa8,0xa6,0xa4,0xa2,0xa1,0x9f,0x9d,0x9b,0x99,0x97,0x95,0x93,0x91, 0x8f,0x8e,0x8c,0x8a,0x88,0x86,0x84,0x82,0x80,0x7e,0x7d,0x7b,0x79,0x77,0x76,0x74, 0x72,0x70,0x6e,0x6d,0x6b,0x69,0x68,0x66,0x64,0x62,0x61,0x5f,0x5d,0x5c,0x5a,0x59, 0x57,0x55,0x54,0x52,0x51,0x4f,0x4e,0x4c,0x4b,0x49,0x48,0x46,0x45,0x44,0x42,0x41, 0x3f,0x3e,0x3d,0x3b,0x3a,0x39,0x37,0x36,0x35,0x34,0x31,0x30,0x2f,0x2e,0x2d,0x2b, 0x2a,0x29,0x29,0x28,0x27,0x26,0x25,0x24,0x23,0x22,0x21,0x20,0x1f,0x1e,0x1d,0x1c, 0x1b,0x1a,0x1a,0x19,0x18,0x17,0x16,0x15,0x15,0x14,0x13,0x12,0x11,0x11,0x10,0x0f, 0x0f,0x0e,0x0d,0x0d,0x0c,0x0b,0x0b,0x0a,0x09,0x09,0x08,0x08,0x07,0x07,0x06,0x06, };
//array of pointers to signal tables const uint8_t *SIGNALS[] ={ expwave }; //adjust LCD stream fuinction to use with printf() static int LCDsendstream(char c , FILE *stream) { LCDsendChar(c); return 0; } //delay 1s void delay1s(void) { uint8_t i; for(i=0;i<100;i++) { _delay_ms(10); } } //initialize Timer2 (used for button reading) void Timer2_Init(void) { TCNT2=0x00; sei(); } //start timer2 void Timer2_Start(void) { TCCR2|=(1<<CS22)|(1<<CS21); //prescaller 256 ~122 interrupts/s TIMSK|=(1<<TOV2);//Enable Timer0 Overflow interrupts } //stop timer 2 void Timer2_Stop(void) { TCCR0&=~((1<<CS22)|(1<<CS21)); //Stop timer0 TIMSK&=~(1<<TOV2);//Disable Timer0 Overflow interrupts } //Initial menu //show initial signal and frequency //generator is off void Menu_Update(uint8_t on) { LCDclr(); CopyStringtoLCD(MENU[(SG.mode)], 0, 0 ); LCDGotoXY(0, 1); if (SG.mode==6) { CopyStringtoLCD(CLR, 0, 1 ); LCDGotoXY(0, 1); printf(" %5uHz", (uint16_t)SG.deltafreq); } if (SG.mode==7) { CopyStringtoLCD(CLR, 0, 1 ); CopyStringtoLCD(RND, 0, 1 ); } if (SG.mode==8) { CopyStringtoLCD(CLR, 0, 1 ); LCDGotoXY(0, 1); printf(" %5uMHz", SG.HSfreq); } if((SG.mode==0)||(SG.mode==1)||(SG.mode==2)||(SG.mode==3)||(SG.mode==4)||(SG.mode==5)) { CopyStringtoLCD(CLR, 0, 1 ); LCDGotoXY(0, 1); printf(" %5uHz", (uint16_t)SG.freq); } if (SG.mode!=6) { if(on==1) CopyStringtoLCD(MNON, 13, 1 ); else CopyStringtoLCD(MNOFF, 13, 1 ); } } //update frequency value on LCD menu - more smooth display void Freq_Update(void) { if (SG.mode==6) { LCDGotoXY(0, 1); printf(" %5uHz", (uint16_t)SG.deltafreq); } if (SG.mode==8) { //if HS signal LCDGotoXY(0, 1); printf(" %5uMHz", SG.HSfreq); } if((SG.mode==0)||(SG.mode==1)||(SG.mode==2)||(SG.mode==3)||(SG.mode==4)||(SG.mode==5)) { LCDGotoXY(0, 1); printf(" %5uHz", (uint16_t)SG.freq); } } //External interrupt0 service routine //used to stop DDS depending on active menu //any generator is stopped by setting flag value to 0 //DDs generator which is inline ASM is stopped by setting //CPHA bit in SPCR register ISR(INT0_vect) { SG.flag=0;//set flag to stop generator SPCR|=(1<<CPHA);//using CPHA bit as stop mark //CopyStringtoLCD(MNOFF, 13, 1 ); SG.ON=0;//set off in LCD menu loop_until_bit_is_set(BPIN, START);//wait for button release } //timer overflow interrupt service tourine //checks all button status and if button is pressed //value is updated ISR(TIMER2_OVF_vect) { if (bit_is_clear(BPIN, UP)) //Button UP increments value which selects previous signal mode //if first mode is reached - jumps to last { if (SG.mode==0) { SG.mode=MN_No-1; } else { SG.mode--; } //Display menu item Menu_Update(SG.ON); loop_until_bit_is_set(BPIN, UP); } if (bit_is_clear(BPIN, DOWN)) //Button Down decrements value which selects next signal mode //if last mode is reached - jumps to first { if (SG.mode<(MN_No-1)) { SG.mode++; } else { SG.mode=0; } //Display menu item Menu_Update(SG.ON); loop_until_bit_is_set(BPIN, DOWN); } if (bit_is_clear(BPIN, RIGHT)) //frequency increment { if(SG.mode==6) { if(SG.deltafreq==10000) SG.deltafreq=1; else SG.deltafreq=(SG.deltafreq*10); Freq_Update(); loop_until_bit_is_set(BPIN, RIGHT); } if (SG.mode==8) { //ifhigh speed signal if(SG.HSfreq==8) SG.HSfreq=1; else SG.HSfreq=(SG.HSfreq<<1); Freq_Update(); loop_until_bit_is_set(BPIN, RIGHT); } if((SG.mode==0)||(SG.mode==1)||(SG.mode==2)||(SG.mode==3)||(SG.mode==4)||(SG.mode==5)) { if ((0xFFFF-SG.freq)>=SG.deltafreq) SG.freq+=SG.deltafreq; Freq_Update(); uint8_t ii=0; //press button and wait for long press (~0.5s) do{ _delay_ms(2); ii++; }while((bit_is_clear(BPIN, RIGHT))&&(ii<=250));//wait for button release if(ii>=250) { do{ if ((0xFFFF-SG.freq)>=SG.deltafreq) SG.freq+=SG.deltafreq; Freq_Update(); }while(bit_is_clear(BPIN, RIGHT));//wait for button release } } } if (bit_is_clear(BPIN, LEFT)) //frequency decrement { if(SG.mode==6) { if(SG.deltafreq==1) SG.deltafreq=10000; else SG.deltafreq=(SG.deltafreq/10); Freq_Update(); loop_until_bit_is_set(BPIN, LEFT); } if (SG.mode==8) { //ifhigh speed signal if(SG.HSfreq==1) SG.HSfreq=8; else SG.HSfreq=(SG.HSfreq>>1); Freq_Update(); loop_until_bit_is_set(BPIN, LEFT); } if ((SG.mode==0)||(SG.mode==1)||(SG.mode==2)||(SG.mode==3)||(SG.mode==4)||(SG.mode==5)) { if (SG.freq>=SG.deltafreq) SG.freq-=SG.deltafreq; Freq_Update(); uint8_t ii=0; //press button and wait for long press (~0.5s) do{ _delay_ms(2); ii++; }while((bit_is_clear(BPIN, LEFT))&&(ii<=250));//wait for button release if(ii>=250) { do{ if (SG.freq>=SG.deltafreq) SG.freq-=SG.deltafreq; Freq_Update(); }while(bit_is_clear(BPIN, LEFT));//wait for button release } } } if (bit_is_clear(BPIN, START)) { if(SG.mode!=6) { //saving last configuration SG.fr1=(uint8_t)(SG.freq); SG.fr2=(uint8_t)(SG.freq>>8); SG.fr3=(uint8_t)(SG.freq>>16); if (eeprom_read_byte((uint8_t*)EEMODE)!=SG.mode) eeprom_write_byte((uint8_t*)EEMODE,SG.mode); if (eeprom_read_byte((uint8_t*)EEFREQ1)!=SG.fr1) eeprom_write_byte((uint8_t*)EEFREQ1,SG.fr1); if (eeprom_read_byte((uint8_t*)EEFREQ2)!=SG.fr2) eeprom_write_byte((uint8_t*)EEFREQ2,SG.fr2); if (eeprom_read_byte((uint8_t*)EEFREQ3)!=SG.fr3) eeprom_write_byte((uint8_t*)EEFREQ3,SG.fr3); //Calculate frequency value from restored EEPROM values SG.freq=(((uint32_t)(SG.fr3)<<16)|((uint32_t)(SG.fr2)<<8)|((uint32_t)(SG.fr1))); //calculate accumulator value SG.acc=SG.freq/RESOLUTION; SG.flag=1;//set flag to start generator SG.ON=1;//set ON on LCD menu SPCR&=~(1<<CPHA);//clear CPHA bit in SPCR register to allow DDS //Stop timer2 - menu inactive Timer2_Stop(); //display ON on LCD Menu_Update(SG.ON); } loop_until_bit_is_set(BPIN, START);//wait for button release } } /*DDS signal generation function Original idea is taken from http://www.myplace.nu/avr/minidds/index.htm small modification is made - added additional command which checks if CPHA bit is set in SPCR register if yes - exit function */ void static inline Signal_OUT(const uint8_t *signal, uint8_t ad2, uint8_t ad1, uint8_t ad0) { asm volatile( "eor r18, r18 ;r18<-0" "\n\t" "eor r19, r19 ;r19<-0" "\n\t" "1:" "\n\t" "add r18, %0 ;1 cycle" "\n\t" "adc r19, %1 ;1 cycle" "\n\t" "adc %A3, %2 ;1 cycle" "\n\t" "lpm ;3 cycles" "\n\t" "out %4, __tmp_reg__ ;1 cycle" "\n\t" "sbis %5, 2 ;1 cycle if no skip" "\n\t" "rjmp 1b ;2 cycles. Total 10 cycles" "\n\t" : :"r" (ad0),"r" (ad1),"r" (ad2),"e" (signal),"I" (_SFR_IO_ADDR(PORTA)), "I" (_SFR_IO_ADDR(SPCR)) :"r18", "r19" ); } void Timer1_Start(uint8_t FMHz) { switch(FMHz){ case 1: //start high speed (1MHz) signal OCR1A=7; break; case 2: OCR1A=3;//2MHz break; case 4: OCR1A=1;//4MHz break; case 8: OCR1A=0;//8MHz break; default: OCR1A=7;//defauls 1MHz break;} //Output compare toggles OC1A pin TCCR1A=0x40; //start timer without prescaler TCCR1B=0b00001001; } void Timer1_Stop(void) { TCCR1B=0x00;//timer off } //main init function void Main_Init(void) { //stderr = &lcd_str; stdout = &lcd_str; //--------init LCD---------- LCDinit(); LCDclr(); LCDcursorOFF(); //-------EEPROM initial values---------- if (eeprom_read_byte((uint8_t*)EEINIT)!='T') { eeprom_write_byte((uint8_t*)EEMODE,0x00);//initial mode 0 – OUT~~~~; eeprom_write_byte((uint8_t*)EEFREQ1,0xE8);//initial frequency 1kHz eeprom_write_byte((uint8_t*)EEFREQ2,0x03); eeprom_write_byte((uint8_t*)EEFREQ3,0x00); eeprom_write_byte((uint8_t*)EEINIT,'T');//marks once that eeprom init is done //once this procedure is held, no more initialization is performed } //------restore last saved values from EEPROM------ SG.mode=eeprom_read_byte((uint8_t*)EEMODE); SG.fr1=eeprom_read_byte((uint8_t*)EEFREQ1); SG.fr2=eeprom_read_byte((uint8_t*)EEFREQ2); SG.fr3=eeprom_read_byte((uint8_t*)EEFREQ3); SG.freq=(((uint32_t)(SG.fr3)<<16)|((uint32_t)(SG.fr2)<<8)|((uint32_t)(SG.fr1))); SG.acc=SG.freq/RESOLUTION; SG.flag=0; //default 1MHz HS signal freq SG.HSfreq=1; SG.deltafreq=100; //------------init DDS output----------- R2RPORT=0x00;//set initial zero values R2RDDR=0xFF;//set A port as output //-------------set ports pins for buttons---------- BDDR&=~(_BV(START)|_BV(UP)|_BV(DOWN)|_BV(RIGHT)|_BV(LEFT)); BPORT|=(_BV(START)|_BV(UP)|_BV(DOWN)|_BV(RIGHT)|_BV(LEFT)); //---------set ports pins for HS output--------- HSDDR|=_BV(HS);//configure as output //-----------Menu init-------------- SG.ON=0;//default signal is off Menu_Update(SG.ON); //-----------Timer Init------------- Timer2_Init(); //Start Timer with overflow interrupts Timer2_Start(); } int main(void) { //Initialize Main_Init(); while(1)//infinite loop { if (SG.flag==1) { GICR|=(1<<INT0);//set external interrupt to enable stop if (SG.mode==7) { //Noise do { R2RPORT=rand(); }while(SG.flag==1); //set signal level to 0 R2RPORT=0x00; //display generator OFF Menu_Update(SG.ON); //stop external interrupt GICR&=~(1<<INT0); //start timer menu active Timer2_Start(); } /* else if (SG.mode==6) { //freq step while((SG.flag==1)) { //not implemented CopyStringtoLCD(NA, 0, 1 ); } //set signal level to 0 R2RPORT=0x00; //display generator OFF Menu_Update(SG.ON); GICR&=~(1<<INT0);//|(1<<INT1);//stop external interrupt //start timer menu active Timer2_Start(); }*/ else if (SG.mode==8) { //High speed signal Timer1_Start(SG.HSfreq); while((SG.flag==1)) { //not implemented CopyStringtoLCD(MNON, 13, 1 ); } Timer1_Stop();//timer off //set HS pin to LOW HSPORT&=~(1<<HS); //display generator OFF Menu_Update(SG.ON); GICR&=~(1<<INT0);//|(1<<INT1);//stop external interrupt //start timer menu active Timer2_Start(); } else { //start DDS Signal_OUT(SIGNALS[SG.mode], (uint8_t)((uint32_t)SG.acc>>16), (uint8_t)((uint32_t)SG.acc>>8), (uint8_t)SG.acc); //set signal level to 0 R2RPORT=0x00; //display generator OFF Menu_Update(SG.ON); GICR&=~(1<<INT0);//|(1<<INT1);//stop external interrupt //start timer menu active Timer2_Start(); } } } return 0; }
ошибка section .MySection1 loaded at [000016ce,000017cd] overlaps section .data loaded at [000016ce,000016f5] Подскажите пожалуйста,где посмотреть, по какой причине он так записывает в память. Гуглила, ничего толкого не нашла. Заранее спасибо. Раздел: Песочница или Вопрос-Ответ
Добрый день, имеется блок АТХ типа 430W, на нем есть переключатель для чего он служит? На переключателе написано в одном положении 230 в другом 115. Я так понял блок может работать на разное напряжение 110, 220? Блок был не исправен и был вскрыт до меня, хотел проверить 3 линии на питания, блок проверялся без компьютера, замкнул я центр(зеленый) и землю(черный) провода, когда переключатель стоял на 230, ни на одной линии не было питания, после чего перекинул на 115 (была моя глупость), перемычка как стояла так и стоит, вроде все нормально, но стоило мне достронуться крастного провода одним щупом мультиметра (2 щуп не был подключен), как сгорела проводка где-то в стене (не провод блока)..пробки стояли на 16А в счетчике, но они не сработали..кто знает в чем причина и что это за переключатель? Раздел: Начинающим
Продам по Украине 2 динамика 75ГДН-4Л-4.Практически новые.Цена 400 грн. пара. Раздел: Продам
Здравствуйте товарищи! Недавно нашел усилитель у помойки. Забрал домой. Включил - работает! Сейчас использую для тыловых S-30x. Проблема в том, что срабатывает защита, на ~ 50% мощности. При этом если перевести баланс на правый канал - на 80-85%. На фронту стоят старенькие, активные SVEN SPS-866. Вопрос: Стоит ли восстанавливать его (перепаивать электролиты и т.д. (если да то какие)) или лучше выкинуть "начинку" амфитона и сделать из него (в идеале 4-х канальный) на TDA2050? Просто знаниями в электронике особо не располагаю, так что не судите строго Раздел: Усилители мощности
Привет всем!
Взгляните на данный код:
#include <mega8535.h> // MCP23S17 SPI Slave Device #define SPI_SLAVE_ID 0x40 #define SPI_SLAVE_ADDR 0x00 #define SPI_SLAVE_WRITE 0x00 #define SPI_SLAVE_READ 0x01// MCP23S17 Registers Definition for BANK=0 (default) #define IODIRA 0x00 #define IODIRB 0x01 #define IOCONA 0x0A #define GPPUA 0x0C #define GPPUB 0x0D #define GPIOA 0x12 #define GPIOB 0x13
#define SPI_CS 0 // SPI functions #define SPI_ACTIVE_SS(PORT,SPI_CS) PORT &= ~(1<<SPI_CS); #define SPI_UNACTIVE_SS(PORT,SPI_CS) PORT |= (1<<SPI_CS); // Declare your global variables here
void SPI_write(unsigned char addr,unsigned char data) { SPI_ACTIVE_SS(PORTB,0); SPDR = SPI_SLAVE_ID | ((SPI_SLAVE_ADDR << 1) & 0x0E)| SPI_SLAVE_WRITE; while(!(SPSR & (1<<SPIF))); SPDR = addr; while(!(SPSR & (1<<SPIF))); SPDR = data; while(!(SPSR & (1<<SPIF))); SPI_UNACTIVE_SS(PORTB,0); }
interrupt [TIM2_OVF] void timer0_ovf(void) {
TCNT2=200;
} void main(void) {
PORTA=0x01; DDRA=0x00;
DDRB=0xB1;
ASSR=0x00; TCCR2=0x07; TCNT2=200; OCR2=0x00;
TIMSK=(1<<TOIE2);
ACSR=0x80; SFIOR=0x00;
SPCR=0x50; SPSR=0x00;
SPI_write(IOCONA,0x20); // I/O Control Register: BANK=0, SEQOP=1, HAEN=1 (Enable Addressing) SPI_write(IODIRA,0x00); // GPIOA As Output //SPI_Write(IODIRB,0xFF); // GPIOB As Input //SPI_Write(GPPUB,0xFF); // Enable Pull-up Resistor on GPIOB SPI_write(GPIOA,0x00); #asm("sei") while(1) { if (!(PINA&0x01)){ SPI_write(GPIOA ,0x01); } else SPI_write(GPIOA ,0x00); }
}
Данный простейший код который просто проверяет на правильность написанного кода для расширителя порта MCP23S17. На протеусе симулируется на гуд. А в реале Обнаруживается постоянная лог.1 в регистре MOSI при просмотре осциллографом.
А если в цикле while кода изменить так:
while(1) {
SPI_write(GPIOA ,0x01); SPI_write(GPIOA ,0x00);
}
}
То код работает и MOSI работает как надо.
Помогите люди с данной проблемой!! Кстати данный код работает только регистром MOSI, но ни как не влияет на работу расширителя в реале. А в протуесе даже бесконечная отправка данных по SPI влияет на работу расширителя то есть регистре GPA0 наблюдается изменение. Схему показывать не буду так как там ничего не обычного
-> питание общее для всей схемы
-на МК (с фильтром по питанию) - +5V
-на MCP23S17(без фильтра) - +5V
->ножки MOSI MISO SCK SS(CS)
-подключены на прямую \\MISO-SO\\ MOSI-SI\\ SCK-SCK\\ SS(PORTB.0)-CS
-> ножка RESET
-в МК не натянута на питание через 10кОмный резистор(т.к. пока это не важно)
-в MCP23S17 ножку подал +5V.
->MCP23S17
-ножка GPA0 подана на LED с резистором номиналом 120 Ом
-ножки A0 A1 A2 - не затронуты.
Какую инфу дать еще для быстрой помощи от Уважаемых форумчан?
Вот проект, писал на другом форусе, но там не смогли мне помочь.
http://chipenable.ru/media/kunena/attachments/8897/Spi-mcp23.rar Раздел: AVR
Здравствуйте. Подскажите, возможно ли как то решить данную проблему? Вообщем купил я на Ebay флэшку, попалась первая за 4 зеленых, ну взял ее. Неизвестного производителя. Вообщем когда получил телефон Nokia 6500 slide, начал ее использовать. При заливании на нее музыки, Windows выдает ошибку, устройство больше недоступно или что-то в этом роде, а в трее CHKDSK выдает ошибку что повреждены сектора (точно непомню. запустить надо CHKDSK через командную строку надо. Ну файлы с горем пополам заливаются, однако их на 1,5Гб, а телефон говорит 872Мб. Опять форматирую, заново закину, вроде нормально становится. Но еще подобные ошибки выдает и телефон. К примеру в игре Gravity Defied повреждаются сохранения и при следующем запуске игра выдает ошибку и не запускается. Камера фотографирует и выдает ошибка сохранения и переводится в режим ожидания. Проигрыватель тьфу-тьфу без глюков проигрывает музыку. Возможно ли восстановить флешку? Выполнял стандартную проверку (в свойствах карты ) на ошибки и дефрагментацию. Заливал через картридер, PC Suite и телефон в режиме накопителя - одно и то же Вот фотографии этого чуда Раздел: Разное
Куплю указанный девайс, можно в нерабочем состоянии за недорого и желательно в Москве. Можно на что-нить поменяться ... Раздел: Куплю
имею беспроводной гаджет для управления люстрой, нажав на пульт можно включать, выключать лампы. Вопрос! как подключить беспроводной пульт к USB порту, чтоб можно был включать кнопки на пульту, по средствам юзб парта. Нужно чтоб юзб порт замыкал и не посредствено размыкал. Раздел: Самодельные устройства к компьютеру
Разобранный аппарат,на запчасти!Возможно рабочий!Москва,цена 200 руб. Раздел: Продам
Нашел такие солнечные элементы http://www.ebay.com/...=item33765c9804хочу собрать стабилизированный ИП/зарядник 12.6В 1.5А выходит так, что 10 элементом дадут среднее напряжение и ток 5В, 3.8А соотв. нужен повышающий преобразователь, самая простая схема (важен размер и вес) Остановился на непосредственном инвертирующем повышающей преобразователе http://www.hserv.ru/...y/inverting.phpВопросы такие: 1) Норм. ли схема для поставленной задачи? 2) Достоинства и недостатки схема 3) Расчет. Почему-то нашел мало инфы по этой схеме. Выбрал ее потому что ключ здесь вкл. последовательно. Тоесть найти высоковольтный МОП на ток нагрузки не сложно. например IRF540N 100 V, 33 A, Rds = 0.044 Ом тоесть стат. потери около 100мВт наверное даже радиатор не нужен ) Раздел: Схемотехника для начинающих
Нужен совет как подключить трансформатор. Куда 220. Где искать выход 12-15? Транформатор ЕИ4 704 047 На другой стороне написано Выводы 1-2(1-2) Провод ПЭВТЛ-10,45, Кол-тво витков 475 Выводы 3-4(3-4) Провод ПЭВТЛ-10-28, Кол-тво витков 285 Выводы 5-6(5-6) Провод ПЭВТЛ-10,9 Кол-тво витков 38 Выводы 6-7(6-7) Провод ПЭВТЛ-10,9 Кол-тво витков 12 Выводы 8-9(8-9) Провод ПЭВТЛ-10,28 Кол-тво витков 68 Раздел: Песочница или Вопрос-Ответ
Появилась мысль можно ли как приделать к ПК сенсорный экран (телефона или gps навигатора) по средствам USB или паять прям к матери ?
Чтобы в конце экран имел свойства Тачпада и ещё выводилась клавиатура для печатания. И надо дополнительное ПО для такого ? Раздел: Самодельные устройства к компьютеру
кто нибудь собирал на ней усь ? если можно подкиньте печатку в нете не на шол. интересует 2.1 ну можно и просто стерео Раздел: Для начинающих
Имеется телевизор Rubin 55sm10-6 у которого начал полосить экран снизу, тоесть картинка сдвигалась на пару сантиметров снизу экрана но не полностью а полосами...вкрыл обнаружил что в нем когда то был ремонт и вместо конденсатора c314 который судя по схеме просто просадочный и весит на землю весит примерно такой на 25в и уже подсохший..заменил выяснилось что дело не в нем, более того теперь картинка вообще не на весь экран да еще и снизу вообще теперь темная полоса шириной в 10см...более того интересно что по схеме должно быть напряжение на этом кондере 14 вольт а там все 30 и кондер кстати греется... подскажите куда смотреть раньше с телеками дела не имел да, а отдать в ремонт вообще не представляется возможным Раздел: Песочница или Вопрос-Ответ
Продам наушники ATH-A900X, прослушивались несколько раз, не разогретые. 7500р плюс пересыл. Раздел: Продам
Полноразмерным ноутбукам, как и их более компактным родственникам, тоже требуется охлаждение, иногда даже дополнительное. Вариантов избавления от невыносимой жары для 17-дюймовых лэптопов не так уж много — вентилятор или кондиционер, или же можно поискать специальную подставку-кулер, коих под такие габариты...
Геймерам, ведущим ночной образ жизни и разделяющим территорию с родственниками, просто необходим мощный, но в то же время бесшумный компьютер, который не жужжит десятками кулеров во время работы. Первым шагом к избавлению от вентиляторов может стать установка видеокарты Radeon HD...
Как сообщают тайваньские индустриальные источники, Nokia постепенно переносит заказы ЖК-панелей из Samsung Display, перемещая их на мощности Innolux Corporation и Chunghwa Picture Tubes (CPT). Произошло это якобы в результате последних регулирований доступных для размещения заказа мощностей со стороны Samsung.Утверждается, что...
Когда Apple впервые представила iPod, устройство выпускалось в единственном формате, но с течением лет линейка карманных музыкальных проигрывателей была расширена разнообразными вариантами вроде iPod Shuffle, iPod Nano, iPod touch и так далее. По мнению бывшего специалиста по рекламе Apple Кена...
[next-page][/next-page]
|