Страница 387 из 628
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-блока нельзя...
Как выйти из этой ситуации?
Спасибо. Своих мозгов перестало хватать.
Ругань 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. Вы передаете ей неправильный аргумент)
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вт дек 18, 2012 02:59:25
vitalik_1984
Sceam73 писал(а):
lcd_putchar(display%10000/1000);
lcd_putchar(display%1000/100);
lcd_putsf(",");
lcd_putchar(display%1000/10);
\
Я не зря выделил присмотритесь внимательно.
Вообще проще использовать связку itoa() и lcd_puts();
Вот понятный пример
HHIMERA писал(а):vitalik_1984 писал(а):
То есть MISO-DO, MOSI-DO
(С пониманием) Воскресенье... поздний вечер...
Точно имелось ввиду MISO-DO, MOSI-DI
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вт дек 18, 2012 06:12:37
Sceam73
виталик, это намек на то что putchar, выводит только переменные char? за ссылку спасибо) как наступит утро, так и буду пробовать....
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вт дек 18, 2012 08:46:20
urry
имхо, это намек на то, что в дисплей нужно выдавать коды с его кодовой страницы -
те не 0 - а 0x30, не 1, а 0x31 соответственно
ваши 0, 1, 2 - в кодовой странице соответствуют символам псевдографики, которая добросовестно и выводится.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вт дек 18, 2012 09:44:10
Sceam73
Даже так ? ....
Я вышел с положения немного подругому! lcd_gotoxy(0,0);
lcd_putchar(display%10000/1000+0x30);
lcd_putchar(display%1000/100+0x30);
lcd_putsf(",");
lcd_putchar(display%1000/10+0x30);
Так можно ?
У меня появились 00,0
Но работать мой вольтметр отказываеться, реакции никакой, при подключении бп на контакты (бп 12 в) показывает все те же нули!
Может это из за неправильной организации вывода цифр на лсд ? Пока попробую найти ошибку сам, но если кто подскажет, буду благодарен!