Можете обьяснить, глупый вопрос наверно..А почему происходит падение на диоде-диод, это полупроводник, который пропускает ток в одном направлении...???
Ну, диод и в обратном направлении тоже пропускает, но только ток при этом очень малый, пока пробой не наступит, поэтому и считается, что диод пропускает лишь в одном направлении. А для стабилитронов (которые тоже диоды, только специальные) рабочий участок как раз на область пробоя и приходится, почему они включаются в схему "задом наперёд", а не как обычные диоды.
Что же касается падения напряжения, то оно падает на всём, через что протекает ток и чьё сопротивление отлично от нуля (закон Ома в действии). У диода, понятное дело, сопротивление не равно нулю. Разница же между резистором и диодом в том, что у резистора сопротивление постоянно (ну, почти постоянно: оно тоже немного колеблется в зависимости от температуры и других факторов, но колебания незначительны и ими можно пренебречь), а у диода оно зависит от напряжения. Поэтому на начальном участке вольт-амперной характеристики по мере повышения напряжения на диоде ток растёт медленно, но постепенно рост ускоряется. К напряжению примерно 0,7 В сопротивление диода становится очень малым и наступает ситуация, когда дальнейший рост тока ограничивает не сам диод, а включенное последовательно с ним сопротивление (не обязательно резистор в чистом виде). Если это сопротивление достаточно велико, ток не может вырасти сколько-нибудь значительно, а значит, на диоде падают примерно эти 0,7 В. Правда, цифра эта достаточно условна, поскольку зависит от особенностей диода, от температуры, от тока, но для большинства случаев можно считать её верной. Если последовательно включены два диода, на них падает 1,4 В, если три -- 2,1 В, и т.д. Можно считать, что такой ситуации диоды работают, как стабилизаторы напряжения на уровне 0,7 В. Кстати, это справедливо только для обычных кремниевых диодов, для диодов из других материалов или другой конструкции напряжение "стабилизации" будет другим (у диодов Шоттки, насколько помню, что-то вроде 0,2-0,3 В).
Зарегистрирован: Вт май 03, 2011 20:01:23 Сообщений: 140
Рейтинг сообщения:0
Кто-то, кто делал аналогичное в Codevision, могли бы поделиться кодом, ну самым простым, допустим чтения с карты... Просто пока не могу вообще сдвинуться с места
Вот. Думаю разберешься. Программа заставляет контролер читать определенный файл с карты и побайтно выкладывать в порт А попути дергая управляюшие сигналы. Если интересно то устройство использовалось для эмуляции ПЗУ спектрума.
Зарегистрирован: Вт май 03, 2011 20:01:23 Сообщений: 140
Рейтинг сообщения:0
Ну, наступило то время, когда я спаял всё и просмотрел код... Возникли некие вопросы по коду: #include <mega16.h> // Standard Input/Output functions #include <stdio.h> #include <delay.h> #include <spi.h>
static char Buffer[512]; char res; unsigned int Clustervar; unsigned long ByteSend =0; unsigned int filenum = 0; int Percent;
extern void fat_init(void); //extern unsigned int Power_check(unsigned char adc_input); unsigned long FAT_NextCluster(unsigned long cluster); int play(void); //extern int FAT_readCluster(unsigned long cluster, char sector_offset); //extern void idinfo(unsigned long cluster); unsigned long Size = 0;
// SPI Port config DDRB.4=1; // set SS as output DDRB.5=1; // set MOSI as output DDRB.6=0; // set MISO as input DDRD.2=1; // SCK output DDRD.3=1; // CS output DDRB.0=1; DDRB.2=1; DDRB.1=1; DDRB.4=1; PORTD.3=1; // CS not active PORTD.2=1; // set SCK hi PORTB.1=0; // rst disp PORTB.4=1;
// VS1001K Control def
// for LS020 TFT /* DDRC.6=1; //RS line is out PORTC.6=1; DDRC.5=1; //RESET line is out PORTC.5 = 1; DDRC.4=1; // CS line is out PORTC.4=1; */
Clustervar = 0;//suche im Root Verzeichnis if (fat_search_file(&Fname[0],&Clustervar,&Size,&Dir_Attrib,Buffer) == 1) { printf("Total %i files found\r\n",filenum); printf("----------\r\n"); printf("\r\nFile: %s\r\n",Fname); printf("Size: %3li Byte\r\n", Size); printf("\nFile Found!!\r\n"); printf("----------\r\n"); WR_FLAG = 1; printf("Waiting 4 sec for FPGA configuring...\r\n"); delay_ms(4000); DATA_PORT = 0x00; printf("CPU is WAIT for ROM be loaded\r\n"); STR_FLAG = 0; printf("Reading file and loading ROM\r\n"); play(); } else { printf("File not found\r\n"); }; OK_LED = 1; WR_FLAG = 0; STR_FLAG = 0; DATA_PORT = 0x00; printf("Loading complete\r\n"); printf("Z80 CPU reset\r\n"); Z80_RST = 0; delay_ms(500); Z80_RST = 1; printf("Ok\r\n"); printf("End program\r\n"); }; printf("Do work wihtout SD/MMC\r\n"); //lcd_init(); //LCD_FillRect(0,0,132,176,black); while(1) {
//put_str(10,10,buf,0,1); //delay_ms(800); }; }
unsigned long FAT_NextCluster(unsigned long cluster) { int result=0; unsigned long sector,position,next; if (cluster ==0 ) cluster = 2; sector = cluster / 256; result = mmcRead(FAT16_fat_begin_lba+sector,Buffer); if (result) return 0; position = (cluster - (sector * 256)) * 2; next = Buffer[position+1]; next <<= 8; next += Buffer[position]; if (next == 0xffff) next = 0xffffffff; return next; }
int play(void) { unsigned long LBA,i,j,NextCluster; long index = 0; NextCluster = Clustervar;
while (1) { LBA = FAT_cluster2lba(NextCluster); for (i=0;i<sectors_per_cluster;i++) { mmcRead(LBA+i,Buffer); for (j=0;j<bytes_per_sector;j++) { DATA_PORT = Buffer[j]; STR_FLAG = 1; delay_us(50); STR_FLAG = 0; delay_us(500);
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения