Помогите с SPI и цифровым резистром

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить
Открыл глаза
Сообщения: 42
Зарегистрирован: Сб ноя 29, 2014 21:20:52

Сообщение panya »

Мяу. :))

Не работает вот эта штука, не могу понять из-за чего ((
Даташиты поковырял и ничего не нашел, по идее должно работать, но реальность упертая штука :shock:

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

#include <io.h>

// Declare your global variables here

#include <delay.h>

unsigned char cData=90;

/* Макросы для кнопок:  */
#define DDR_Button  DDRB
#define Button_0    0
/* - - - - - - - - - - - - - - - - - - - - - - - */

/* Макросы для SPI % Используем аппаратный SPI % */
#define DDR_SPI     DDRB
#define DD_PB1      1
#define DD_SS       2
#define DD_MOSI     3
#define DD_MISO     4
#define DD_SCK      5
/* - - - - - - - - - - - - - - - - - - - - - - - */

void SPI_MasterInit(void){
/* Включили SPI, мастер, установили частоту Fck/128 */
SPCR=(0<<SPIE)|(1<<SPE)|(0<<DORD)|(1<<MSTR)|(0<<CPOL)|(0<<CPHA)|(1<<SPR1)|(1<<SPR0);
SPSR=(0<<SPI2X);
/* Установили MOSI и SCK выход, все остальные вход */
DDR_SPI=(1<<DD_MOSI)|(1<<DD_SCK)|(0<<DD_MISO);
}

void SPI_MasterTransmit(unsigned char cData){
/* Команда писать данные в нулевой потенциометр */
SPDR=0b00010001; while(!(SPSR & (1<<SPIF)));
/* Старт передачи */
SPDR=cData; while(!(SPSR & (1<<SPIF)));
}

void main(void){
/* Установили кнопки как вход */
DDR_Button=(0<<Button_0)|(1<<DD_PB1)|(1<<DD_SS);

SPI_MasterInit();

 while(1)
          {
          if(PINB.0==1){PORTB.1=0; cData=cData+10; SPI_MasterTransmit(cData);}else{PORTB.1=1;       
          }
         
          }
}
Вложения
н44.png
(12.14 КБ) 427 скачиваний
Реклама
Держит паяльник хвостом
Аватара пользователя
Сообщения: 995
Зарегистрирован: Сб апр 02, 2011 17:59:22
Откуда: Город-герой Севастополь

Сообщение SubDia »

Так. А что это у Вас происходит с выводом SS? Как вход используется, непонятно.
Где сброс CS потенциометра перед выходом на передачу данных? Тоже не видать мне..
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )
Изображение
Реклама
Мудрый кот
Аватара пользователя
Сообщения: 1817
Зарегистрирован: Пн ноя 29, 2010 15:58:43

Сообщение igor-x »

на http://www.arduino-projekte.de есть библиотеки для MCP41010/MCP41050/MCP42010/MCP42050.
Открыл глаза
Сообщения: 42
Зарегистрирован: Сб ноя 29, 2014 21:20:52

Сообщение panya »

SubDia писал(а):Так. А что это у Вас происходит с выводом SS? Как вход используется, непонятно.
Где сброс CS потенциометра перед выходом на передачу данных? Тоже не видать мне..
SS МК сконфигурирован на вход и на него подвешено питание +5В.

CS:

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

 if(PINB.0==1){PORTB.1=0;...
если нажата кнопка, то низкий уровень, иначе высокий
Реклама
Эиком - электронные компоненты и радиодетали
Держит паяльник хвостом
Аватара пользователя
Сообщения: 995
Зарегистрирован: Сб апр 02, 2011 17:59:22
Откуда: Город-герой Севастополь

Сообщение SubDia »

panya писал(а):если нажата кнопка, то низкий уровень, иначе высокий
Вижу. Наверное, это я еще очи не разлепил с утра)
Честно говоря, я бы эти манипуляции внес в функцию передачи данных. Опустили CS - подняли CS.
Впрочем, ладно.
Еще я бы попробовал (коль совсем непонятно, почему не работает) для эксперимента реализовать программный SPI.
Ибо в принципе работа с MCP41xx/42xx элементарна, "не работать" тут нечему.
Кстати говоря, в чем проявляется неработоспособность? У Вас кнопка отрабатывает? По мне, так в Вашей схеме не хватает подтяжки вывода (который к кнопке подключен, PB0) к "земле". Возможно, конечно, в Протеусе и так работать должно. =)
Что вообще показывает напряжометр?
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )
Изображение
Реклама
Открыл глаза
Сообщения: 42
Зарегистрирован: Сб ноя 29, 2014 21:20:52

Сообщение panya »

SubDia писал(а):Что вообще показывает напряжометр?
Напряжометр показывает падение напруги. Сопротивление больше - падение больше, меньше - меньше. Поставил чтоб контролировать работу сопротивлялки.
SubDia писал(а):Кстати говоря, в чем проявляется неработоспособность?
Если зажать кнопку и запустить протеус, то сопротивление меняется (показания вольтметра меняются, в момент отжатия кнопки, разное время с момента пуска - разные показания вольтметра. Тоесть вроде работает). Если запустить с отжатой кнопкой то ничего не меняется. Хотя осциллограф показывает что что-то отправляется.

Может:
================
/* Установили кнопки как вход */
DDR_Button=(0<<Button_0)|(1<<DD_PB1)|(1<<DD_SS);

POTR.DD_PB1=1;

а потом уже:

if(PINB.0==1){
PORTB.1=0; cData=cData+10; SPI_MasterTransmit(cData);
}else{PORTB.1=1;}

Так как изначально состояние порта не задано.
Реклама
Держит паяльник хвостом
Аватара пользователя
Сообщения: 995
Зарегистрирован: Сб апр 02, 2011 17:59:22
Откуда: Город-герой Севастополь

Сообщение SubDia »

panya писал(а):Напряжометр показывает падение напруги. Сопротивление больше - падение больше, меньше - меньше. Поставил чтоб контролировать работу сопротивлялки.
Да это понятно. Я имел в виду какие конкретно значения он показывает. По идее, после запуска с отжатой кнопкой он должен показать 2,5 В (MCP41010 устанавливает среднее значение (от номинала) сопротивления после сброса).
panya писал(а):POTR.DD_PB1=1;
Пробуйте.
panya писал(а):Если зажать кнопку и запустить протеус, то сопротивление меняется (показания вольтметра меняются, в момент отжатия кнопки, разное время с момента пуска - разные показания вольтметра. Тоесть вроде работает). Если запустить с отжатой кнопкой то ничего не меняется.
Потому что при запуске с зажатой кнопкой у Вас в любом случае выполняется условие
if(PINB.0==1)
А если нет, то на выводе может быть что угодно, вывод-то PB0 в воздухе висит. Притяните его к земле на всякий случай. Приблизительно так.

Изображение
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )
Изображение
Мучитель микросхем
Аватара пользователя
Сообщения: 411
Зарегистрирован: Вс авг 10, 2008 19:35:49
Откуда: Евпатория

Сообщение s_black »

Вот, может быть чем-то поможет.
Контактная информация:
Потрогал лапой паяльник
Сообщения: 359
Зарегистрирован: Чт авг 08, 2013 01:06:54

Сообщение Пока_без_кота »

SubDia писал(а):Приблизительно так.

Изображение
Схема неправильная. Нажатие кнопки никоим образом не повлияет на уровень напряжения на ножке МК. Там всегда будет потенциал земли (0 Вольт).
Открыл глаза
Сообщения: 42
Зарегистрирован: Сб ноя 29, 2014 21:20:52

Сообщение panya »

Всем спасибо. работает. Разрешения толкового не было, сделал разрешение от кнопки, когда вкл. кнопка то подтягивает землю на порт и на CS. И завелся резюк.
мяу
Держит паяльник хвостом
Аватара пользователя
Сообщения: 995
Зарегистрирован: Сб апр 02, 2011 17:59:22
Откуда: Город-герой Севастополь

Сообщение SubDia »

Пока_без_кота писал(а):Схема неправильная.
Точно. Я всегда настраиваю срабатывание по низкому уровню, схема там чуть друга, вот и накосячил в спешке)
panya писал(а):работает.
Ну вот и отлично.
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )
Изображение
Ответить

Вернуться в «Периферия»