Страница 387 из 628

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Сб дек 15, 2012 17:05:23
HHIMERA
Arlleex писал(а):Возможно вы неверно соединили линии MISO и MOSI.
MISO----->MISO
MOSI----->MOSI - так должно быть.
Бред!!! :)))
Нет у SD ни MISO, ни MOSI !!! :)))
Есть DI и DO !!!
SD не может быть мастером... по определению... по сути своей...

MISO----->DO
MOSI----->DI - вот так должно быть.

И на картиночке... Подтягивать CS к земле... да ещё через 1 МОм... :)))
Народ... вы чё??? Конец света досрочно справлять начали... или Новый Год??? :)))

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Сб дек 15, 2012 17:09:55
HHIMERA
Arlleex писал(а):Странное поведение... Никогда не замечал такого.
Чего не замечали??? Повышения тока потребления при работе SD ??? :))
Всегда так было!!!

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Сб дек 15, 2012 17:54:06
black_lizard
Пробуйте все-таки с питанием разобраться, без осциллографа сложнова-то будет. Тыкните им на вывод питания что там за картина?
Был бы он - было бы понятнее, что там с питанием.
MISO----->DO
MOSI----->DI - вот так должно быть.
Если карточка работает в родном режиме то да, CMD/DI и DAT0/DO, но она специально и переводится в SPI режим, тогда выводы и можно назвать MOSI и MISO. И разве MOSI не расшифровывается Master Out Slave In?

Карточка и правда себя странно ведёт. Попробовал другую - тоже не пашет, хотя выводы я перепроверил - всё правильно.

Я делаю так - инициализирую и жду, пока карточка чем-нибудь подёргает. Но она не дёргает не MISO, не CLK. Заваливание её ресетами тоже не приводит к результату по прежнему.

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Сб дек 15, 2012 17:58:14
black_lizard
Вот мой ассемблерный код на отправку байта:
''SEND CMD ===|

Код: Выделить всё

sendSD
                        mov circle, #8          '8 bits
                        
                                                'sending cirlce
send_loop               mov     calc, sndByte
                        and     calc, #$80
                        cmp     calc, #0        wz      
                        
                        or      outa, mosi
              if_z      andn    outa, mosi
               
              
                        or      outa, clock
                        shl     sndByte, #1
                        andn    outa, clock

                        
                        cmpsub  circle, #1      wz, wr
                        if_nz   jmp #send_loop
                        shr     sndByte, #8 
sendSD_ret              ret
Кривоват немного, но я сначала всегда больше для наглядности пишу, чем для скорости.

инициализирую:

Код: Выделить всё

               or      dira, pins_out         'set pins on out    
                        or      outa, pins_st          'set 1 on start out pins

                        mov     sym, #100               '100 cyclres by 8 bit
                         
                                                            ''initializing SD in SPI   
clk_loop            mov     sndByte, #$FF

                        call    #sendSD   

                        cmpsub  sym, #1         wr, wz
              if_nz     jmp     #clk_loop

                        andn    outa, cs1             'set NS to 0
                        andn    outa, cs2 

                        mov     sndByte, #$40
                        call    #sendSD
                        mov     sndByte, #$00
                        call    #sendSD
                        call    #sendSD
                        call    #sendSD  
                        call    #sendSD
                        mov     sndByte, #$95
                        call    #sendSD
Дальше жду ответа, но карточка молчит

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Сб дек 15, 2012 18:24:19
HHIMERA
black_lizard писал(а): Если карточка работает в родном режиме то да, CMD/DI и DAT0/DO, но она специально и переводится в SPI режим, тогда выводы и можно назвать MOSI и MISO.
Можно и "Машку за ляжку" и "телегу с разбегу"... :)))
Но правильно - CMD/DI и DAT0/DO...
И разве MOSI не расшифровывается Master Out Slave In?
Уже написал...
SD не может быть мастером... по определению... по сути своей...
Поэтому аббревиатура MOSI/MISO здесь просто неуместна...
Я делаю так - инициализирую и жду, пока карточка чем-нибудь подёргает. Но она не дёргает не MISO, не CLK.
Вот и приехали... :))
Не может карточка дёргать CLK... и не ждите... т.к. SD не может быть Мастером... :)))
CLK должен дёргать МК... и при приёме... и при передаче...

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Сб дек 15, 2012 18:39:41
black_lizard
Не может карточка дёргать CLK... и не ждите... т.к. SD не может быть Мастером...
CLK должен дёргать МК... и при приёме... и при передаче...
Это я понял только что, когда карточка вдруг начала ни с того ни с сего дёргать MISO(D0). Я ловил и MISO и CLK и до этого она по всем фронтам молчала. Я так и не понял, что я сделал
Ну и подправив код получил от карточки ответ на команду рестарта 01111111
Еа! Заработало хоть как-то! Будем разбираться дальше.
Кстати, либа из библиотеки так и отказывается инициализировать карточку.

Спасибо большое за помощь всем, кто откликнулся!

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Сб дек 15, 2012 20:42:05
Arlleex
HHIMERA писал(а):Бред!!!
Бред - то что вы написали. В режиме SD - эти линии читаются как DI, DO и т.д.
У SD карты есть еще один режим - SPI. А по стандарту SPI аббревиатура этих линий переназначается в MISO и MOSI.
И на картиночке... Подтягивать CS к земле... да ещё через 1 МОм...
Я же написал русским языком - схема ПРИМЕРНО такая. Я акцентировал внимание на обвязке питания карты памяти. На резисторы внимания не обращал, т.к. автор вопроса указал, что резисторы поставил какие надо.
Чего не замечали??? Повышения тока потребления при работе SD ???
Всегда так было!!!
Разумеется, я это прекрасно знаю.
Странное поведение - то, что когда данные передаются - изображение хромает. Вот что странно.

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Сб дек 15, 2012 21:29:58
black_lizard
Я же написал русским языком - схема ПРИМЕРНО такая. Я акцентировал внимание на обвязке питания карты памяти. На резисторы внимания не обращал, т.к. автор вопроса указал, что резисторы поставил какие надо.
Я их убрал, за ненадобностью. На схеме, на которую я ориентировался с этим МК не было резисторов, как не было вообще и кондёра. Но кондёр с вашей схемы помог.

Уже добился нужных ответов инициализации. Пашет. Если честно, я так и не понял, в чём до этого проблема была.

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Сб дек 15, 2012 21:59:06
Arlleex
А как вы этого добились?
Резисторы нужны, там линии требуют внешней подтяжки. В даташите на карты даже написано :)

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Сб дек 15, 2012 22:23:23
HHIMERA
Arlleex писал(а):Бред - то что вы написали.
Неужели??? :)))
Arlleex писал(а): MISO----->MISO
MOSI----->MOSI - так должно быть.
А это чей бред??? :)))
В режиме SD - эти линии читаются как DI, DO и т.д.
У SD карты есть еще один режим - SPI. А по стандарту SPI аббревиатура этих линий переназначается в MISO и MOSI.
:)))
А производители памяти, видать, этого и не знают... :)))
Мало того... они упорно игнорируют ваши рекомендации... и продолжают именовать выводы DI, DO, SI, SO и т .д. ... но никак не MISO и MOSI... :)))
С чего бы это???

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Сб дек 15, 2012 22:26:37
Gudd-Head
vitalik_1984 писал(а):Причем биты именованные и не нужно заглядывать в даташит под каким номером идет нужный бит.
Да, но можно словить нехилый глюк, если в дефайне неправильно обозван номер бита. Тогда уж наглядней будет конструкция в комментах типа
01
||_ A
|__ B

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Сб дек 15, 2012 22:51:52
black_lizard
А как вы этого добились?
Резисторы нужны, там линии требуют внешней подтяжки. В даташите на карты даже написано
В разных источниках варьируется номинал и их присутствие вообще. Не думаю, что будет такая уж существенная разница, если учитывать, что контроллер всё равно не выжмет из карточки запредельные скорости.

Не проще перестать спорить и сойтись на CMD/DI/MOSI определении? Землю тоже, знаете ли, по разному указываются, VSS, GND, V-. Когда я увлёкся МК эта куча определений для одних и тех же вещей дезориентировали, потом стало нормально. Главное же всё равно протокол передачи.

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Сб дек 15, 2012 22:59:08
Gudd-Head
black_lizard писал(а):VSS, GND, V-
Как я уже где-то писал, обычно пользуются парами VSS c VDD и GND с VCC. V- пока не встречал :)))

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Сб дек 15, 2012 23:12:08
Arlleex
Изображение
Ну а вообще, если речь идет например, о таких линиях питания, как GND и AGND, то стоит помнить - что это все таки разные линии...

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Вс дек 16, 2012 22:57:00
vitalik_1984
Точно точно, особенно V- не то же самое, что GND.
HHIMERA писал(а):
И разве MOSI не расшифровывается Master Out Slave In?

Уже написал...
И Что вы хотели своим выделением сказать? Вообще если карта не может быть мастером, то значит нужно использовать часть аббревиатуры для слейва, что в этом такого?
Понятно, что нелогично было бы подписывать MISO для устройства, которое может быть только слейвом. Но в связке с Мк такое допущение тоже понятно.
Хотя в контексте темы как правильно подключить карту памяти более правильным было бы использовать именно те обозначения, что указаны в даташите на устройство.
То есть MISO-DO, MOSI-DO
Да, но можно словить нехилый глюк, если в дефайне неправильно обозван номер бита. Тогда уж наглядней будет конструкция в комментах типа
01
||_ A
|__ B
Существует много подводных камней.
Ваш наглядный вариант можно использовать, если эта настройка используется один раз в начале программы, либо в какой нибудь библиотеке, а представьте себе картинку, в которой последовательно изменяются несколько регистров по вашему формату.
Тут сразу проявятся недостатки этого способа такие как трудночитаемость в связи с реальным избытком информации.
Большое время для внесение изменений и создания кода.

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Пн дек 17, 2012 12:48:54
HHIMERA
vitalik_1984 писал(а):И Что вы хотели своим выделением сказать? Вообще если карта не может быть мастером, то значит нужно использовать часть аббревиатуры для слейва, что в этом такого?
Понятно, что нелогично было бы подписывать MISO для устройства, которое может быть только слейвом. Но в связке с Мк такое допущение тоже понятно.
Хотя в контексте темы как правильно подключить карту памяти более правильным было бы использовать именно те обозначения, что указаны в даташите на устройство.
То есть MISO-DO, MOSI-DO
(С пониманием) Воскресенье... поздний вечер...

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Пн дек 17, 2012 17:09:19
ut1wpr
Уже полторы страницы спор ни о чем...

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Пн дек 17, 2012 19:13:54
Chettuser
Тэксс.. Заварочный чайник застрял на коде:
Спойлерmodule divider_time (
input wire [3:0] div_range,
input wire clk,
output wire cout );

reg [3:0]counter = 0;
reg i = 0;

always @(posedge clk)
begin
case (div_range)
1: begin i = 0; cout = clk; end
2: i = 1;
4: i = 4;
8: i = 9;
default: i = 0;
endcase

if (counter == i)
counter <= 4'b0;
else
counter <= counter + 1'd1;
end

assign cout=(counter == i);

endmodule
Если я правильно понимаю выход из ситуации сложный - когда идёт присвоение output'у значения переменной и в тоже время этого делать внутри always-блока нельзя...
Как выйти из этой ситуации? :(
Спасибо. Своих мозгов перестало хватать. :oops:

Ругань Quartus'а:
СпойлерError (10137): Verilog HDL Procedural Assignment error at divider_time.v(12): object "cout" on left-hand side of assignment must have a variable data type

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Пн дек 17, 2012 21:47:51
Sceam73
Ребят, Проблема с вольтметром!
Код
Спойлер#include <mega8.h>

// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x12 ;PORTD
#endasm
#include <lcd.h>

#include <delay.h>

#define ADC_VREF_TYPE 0x00
volatile long display = 0;
volatile unsigned long value;
volatile unsigned int adc_counter;

// ADC interrupt service routine
interrupt [ADC_INT] void adc_isr(void)
{
unsigned int adc_data;
// Read the AD conversion result
adc_data=ADCW;
// Place your code here
value = value + (adc_data*11/4);
adc_counter++;
}

// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;

// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=0x00;
TCNT0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// ADC initialization
// ADC Clock frequency: 156,250 kHz
// ADC Voltage Reference: AREF pin
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x8C;
delay_ms(50);

// LCD module initialization
lcd_init(16);

// Global enable interrupts
#asm("sei")

delay_ms(50);

while(1)
{
if (adc_counter > 300) // âû÷èñëÿåì ñðåäíåå çíà÷åíèå ÀÖÏ
{
display = value/adc_counter;
adc_counter = 0;
value = 0;
}
delay_ms(50);
lcd_gotoxy(0,0);
lcd_putchar(display%10000/1000);
lcd_putchar(display%1000/100);
lcd_putsf(",");
lcd_putchar(display%1000/10);

}
}
схема
СпойлерИзображение
только тут подключен сегментник, а у меня 16х2 лсд!
После прошивки выводит мне ll ll,ll в чем проблема, подскажите пожалуйста!

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Вт дек 18, 2012 01:14:37
ibiza11
разберитесь с функцией lcd_putchar. Вы передаете ей неправильный аргумент)