Например TDA7294

Форум РадиоКот • Просмотр темы - Atmega8, spi, pwm
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Ср апр 24, 2024 03:53:21

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 21 ]  1,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Atmega8, spi, pwm
СообщениеДобавлено: Сб июл 18, 2020 14:32:04 
Первый раз сказал Мяу!
Аватар пользователя

Зарегистрирован: Пн фев 15, 2016 17:33:36
Сообщений: 24
Рейтинг сообщения: 0
Atmega8 работает по spi с модулем nrf24. Думал использовать ШИМ 1го таймера, освободил ноги рв1 и рв2. А не работает, потом думаю просто высокий уровень на этих ногах установить, а нету его. Инициализацию nrf24 убрал, уровень на рв1 и 2 поднять получается. Spi и ШИМ вместе не выйдет использовать?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Atmega8, spi, pwm
СообщениеДобавлено: Сб июл 18, 2020 15:48:47 
Друг Кота

Зарегистрирован: Вт мар 13, 2012 12:16:13
Сообщений: 6881
Откуда: .ru
Рейтинг сообщения: 0
у нас вышло https://www.radiokot.ru/forum/viewtopic ... 8&t=148087


Вернуться наверх
 
 Заголовок сообщения: Re: Atmega8, spi, pwm
СообщениеДобавлено: Сб июл 18, 2020 16:39:29 
Atmega8 работает по spi с модулем nrf24. Думал использовать ШИМ 1го таймера, освободил ноги рв1 и рв2. А не работает

Если использовать свою библиотеку для nrf24 по SPI то использования ШИМ таймера1 проблем не должно возникать. Если сторонняя библиотека для nrf24 по SPI, то её придётся править (в плане использования вывода SS - РВ2).


Вернуться наверх
   
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Atmega8, spi, pwm
СообщениеДобавлено: Вс июл 19, 2020 07:51:53 
Первый раз сказал Мяу!
Аватар пользователя

Зарегистрирован: Пн фев 15, 2016 17:33:36
Сообщений: 24
Рейтинг сообщения: 0
Atmega8 работает по spi с модулем nrf24. Думал использовать ШИМ 1го таймера, освободил ноги рв1 и рв2. А не работает

Если использовать свою библиотеку для nrf24 по SPI то использования ШИМ таймера1 проблем не должно возникать. Если сторонняя библиотека для nrf24 по SPI, то её придётся править (в плане использования вывода SS - РВ2).

Да в тот то и дело что своя, ноги 1и2 свободны. 2 перенёс и передатчик работает с перенесенным ss


Вернуться наверх
 
Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.

Подробнее>>
 Заголовок сообщения: Re: Atmega8, spi, pwm
СообщениеДобавлено: Вс июл 19, 2020 08:10:14 
Значит не корректно написан код… ищите ошибку… не может таймер-счётчик1 влиять на работу аппаратного SPI. Так и аппаратный SPI не может влиять на работу таймера1.


Вернуться наверх
   
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Atmega8, spi, pwm
СообщениеДобавлено: Вс июл 19, 2020 19:59:29 
Первый раз сказал Мяу!
Аватар пользователя

Зарегистрирован: Пн фев 15, 2016 17:33:36
Сообщений: 24
Рейтинг сообщения: 0
Значит не корректно написан код… ищите ошибку… не может таймер-счётчик1 влиять на работу аппаратного SPI. Так и аппаратный SPI не может влиять на работу таймера1.

Ну до работы таймера дело даже не дошло. Просто если прошла инициализация передатчика по spi то тупо высокий уровень на В1 и В2 не установлен. Если закомеетить инициализацию то диодики горят


Вернуться наверх
 
 Заголовок сообщения: Re: Atmega8, spi, pwm
СообщениеДобавлено: Вс июл 19, 2020 20:52:35 
Вы модуль SPI настраиваете сами или используете какую-то библиотеку? При самостоятельной настройки модуля SPI никаких проблем не должно возникать… если используется библиотека, то необходимо посмотреть, в каком состоянии она настраивает вывод SS (РВ2) – на вход или на выход. В случае SPI Master (а это как раз Ваш случай), SS – как правило используется как выход… а значит и ШИМ должен работать… к тому же что настройка модуля SPI никак не затрагивает вывод РВ1 который по Вашим заявлениям так же не работает… «значит дело не в бабине…» (С). :)


Вернуться наверх
   
 
Не в сети
 Заголовок сообщения: Re: Atmega8, spi, pwm
СообщениеДобавлено: Вт июл 21, 2020 19:10:02 
Первый раз сказал Мяу!
Аватар пользователя

Зарегистрирован: Пн фев 15, 2016 17:33:36
Сообщений: 24
Рейтинг сообщения: 0
… «значит дело не в бабине…» (С). :)

установить 1 получилось. при инициализации порта spi была строка
DDRB |= ((1<<PORTB0)|(1<<PORTB3)|(1<<PORTB5));
после инициализации
DDRB |= ((1<<PORTB1)|(1<<PORTB2));
если все это записать в одну строку то работает. нельзя в коде несколько раз ноги определять?


Вернуться наверх
 
 Заголовок сообщения: Re: Atmega8, spi, pwm
СообщениеДобавлено: Вт июл 21, 2020 19:14:38 
нельзя в коде несколько раз ноги определять?

Можно хоть 100500 раз… главное с пониманием и расстановкой. :)


Вернуться наверх
   
 
Не в сети
 Заголовок сообщения: Re: Atmega8, spi, pwm
СообщениеДобавлено: Вт июл 21, 2020 20:48:03 
Первый раз сказал Мяу!
Аватар пользователя

Зарегистрирован: Пн фев 15, 2016 17:33:36
Сообщений: 24
Рейтинг сообщения: 0
нельзя в коде несколько раз ноги определять?

Можно хоть 100500 раз… главное с пониманием и расстановкой. :)

подскажите где я туплю?
так на ногах PB1 и PB2 высокого уровня нет
Спойлер
Код:
int main(void)
{
   //инициализация spi и ножек nrf24
      DDRB |= ((1<<PORTB0)|(1<<PORTB3)|(1<<PORTB5)); //ножки SPI , CSN, MOSI, SCK
      DDRD |= (1<<PORTD6); //на выход CE
      DDRB &= ~(1<<PORTB4); //MISO на вход
      DDRD &= ~(1<<PORTD7); //IRQ на вход
      PORTB &= ~((1<<PORTB3)|(1<<PORTB5)); //низкий уровень  MOSI, SCK
      PORTB |= (1<<PORTB0); //высокий уровень CSN (0 - запись и чтение)
      PORTD |= (1<<PORTD6); //высокий уровень CE (прием-0, передача-1)
      PORTD |= (1<<PORTD7); // подтяжка IRQ к 1
      SPCR = ((1<<SPE)|(1<<MSTR)|(1<<SPR0));//включим шину, объявим ведущим
   //передача байта в nrf24
      PORTB &= ~(1<<PORTB0); //низкий уровень CSN
      SPDR = 0x20;
      while(!(SPSR & (1<<SPIF)));//подождем пока данные передадутся
      SPDR = 0x3E;
      while(!(SPSR & (1<<SPIF)));//подождем пока данные передадутся
      data = SPDR;
      PORTB |= (1<<PORTB0); //высокий уровень CSN
      
   //попытка установить высокий уровень
       DDRB|=((1<<PORTB1)|(1<<PORTB2));
       PORTB |=((1<<PORTB1)|(1<<PORTB2));
    while (1)
    {
    }
}


а так есть
Спойлер
Код:
int main(void)
{
   //инициализация spi и ножек nrf24
      DDRB |= ((1<<PORTB0)|(1<<PORTB3)|(1<<PORTB5)|(1<<PORTB1)|(1<<PORTB2)); //ножки SPI , CSN, MOSI, SCK
      DDRD |= (1<<PORTD6); //на выход CE
      DDRB &= ~(1<<PORTB4); //MISO на вход
      DDRD &= ~(1<<PORTD7); //IRQ на вход
      PORTB &= ~((1<<PORTB3)|(1<<PORTB5)); //низкий уровень  MOSI, SCK
      PORTB |= (1<<PORTB0); //высокий уровень CSN (0 - запись и чтение)
      PORTD |= (1<<PORTD6); //высокий уровень CE (прием-0, передача-1)
      PORTD |= (1<<PORTD7); // подтяжка IRQ к 1
      SPCR = ((1<<SPE)|(1<<MSTR)|(1<<SPR0));//включим шину, объявим ведущим
   //передача байта в nrf24
      PORTB &= ~(1<<PORTB0); //низкий уровень CSN
      SPDR = 0x20;
      while(!(SPSR & (1<<SPIF)));//подождем пока данные передадутся
      SPDR = 0x3E;
      while(!(SPSR & (1<<SPIF)));//подождем пока данные передадутся
      data = SPDR;
      PORTB |= (1<<PORTB0); //высокий уровень CSN
      
   //попытка установить высокий уровень
       PORTB |=((1<<PORTB1)|(1<<PORTB2));
    while (1)
    {
    }
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Atmega8, spi, pwm
СообщениеДобавлено: Вт июл 21, 2020 21:08:02 
Поставщик валерьянки для Кота

Карма: 12
Рейтинг сообщений: 532
Зарегистрирован: Ср июл 17, 2013 13:55:57
Сообщений: 1978
Рейтинг сообщения: 0
Что-то вы недоговариваете. Судя по отсутствующему определению переменной data, видать не весь код показан. Не могут эти 2 кода сильно по-разному работать.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Atmega8, spi, pwm
СообщениеДобавлено: Вт июл 21, 2020 21:12:43 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
Bald_79 писал(а):
подскажите где я туплю?
так на ногах PB1 и PB2 высокого уровня нет
Естественно, так как включен модуль SPI.
Bald_79 писал(а):
а так есть
Вы сконфигурировали вывод SS PORTB2 на выход до включения модуля SPI, теперь вы можите им управлять на свое усмотрение.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Atmega8, spi, pwm
СообщениеДобавлено: Вт июл 21, 2020 21:13:30 
Первый раз сказал Мяу!
Аватар пользователя

Зарегистрирован: Пн фев 15, 2016 17:33:36
Сообщений: 24
Рейтинг сообщения: 0
Что-то вы недоговариваете. Судя по отсутствующему определению переменной data, видать не весь код показан. Не могут эти 2 кода сильно по-разному работать.

Код:
#define F_CPU 8000000UL

#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>

char data;

int main(void)
{
   //инициализация spi и ножек nrf24

вот только этого не хватает. понимаю что немного странный код, но именно это я загружаю. в одном случае светодиоды горят, в другом нет. эту выдержку я из основного сделал попроще, что бы понять почуму так происходит


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Atmega8, spi, pwm
СообщениеДобавлено: Вт июл 21, 2020 23:10:15 
Поставщик валерьянки для Кота

Карма: 12
Рейтинг сообщений: 532
Зарегистрирован: Ср июл 17, 2013 13:55:57
Сообщений: 1978
Рейтинг сообщения: 0
Естественно, так как включен модуль SPI.

Это где вы такое прочитали?
Вы сконфигурировали вывод SS PORTB2 на выход до включения модуля SPI, теперь вы можите им управлять на свое усмотрение.

А такое где вы прочитали? И как это влияет на PORTB1 тогда?

Добавлено after 2 minutes 18 seconds:
вот только этого не хватает. понимаю что немного странный код, но именно это я загружаю. в одном случае светодиоды горят, в другом нет. эту выдержку я из основного сделал попроще, что бы понять почуму так происходит

Соберите мегу на макетке. К SPI ничего не подключайте, просто пусть ноги в воздухе болтаются, но код оставьте. На PB1, PB2 будет высокий уровень? Вот прям должен.

Добавлено after 4 minutes 43 seconds:
Это конечно не настоящая мега, а симуляция в протеусе, но всё работает как надо.
Изображение


Вложения:
m8-spi+pb12.png [4.26 KiB]
Скачиваний: 510
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Atmega8, spi, pwm
СообщениеДобавлено: Вт июл 21, 2020 23:25:40 
Открыл глаза
Аватар пользователя

Карма: 4
Рейтинг сообщений: 6
Зарегистрирован: Вс апр 15, 2012 23:29:00
Сообщений: 54
Откуда: Воронеж
Рейтинг сообщения: 0
Чёт мистика какая-то((
Лично я бы попробовал:
1. Отключить оптимизацию;
2. Заменить буржуйские записи типа PORTB2, PORTB3 на правоверные 2 и 3.
3. Пройтись симулятором.
4. Бухнуть и приступить с утра.

Больше вариантов неимею.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Atmega8, spi, pwm
СообщениеДобавлено: Ср июл 22, 2020 07:02:10 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
NStorm писал(а):
Это где вы такое прочитали?
NStorm писал(а):
А такое где вы прочитали?
В даташите частично указано. Остальное из личного опыта.
NStorm писал(а):
И как это влияет на PORTB1 тогда?
А вот это ни знаю. Возможно надо было не так
Код:
   //попытка установить высокий уровень
       DDRB|=((1<<PORTB1)|(1<<PORTB2));
       PORTB |=((1<<PORTB1)|(1<<PORTB2));
а так
Код:
   //попытка установить высокий уровень
       DDRB|=(1<<PORTB1);
       PORTB |=(1<<PORTB1);

ТС шим рв1 рв2 нужен?, почему бы не попробовать вот этот код?
Спойлер
Код:
char data;

int main(void)
{
   //инициализация spi и ножек nrf24
      DDRB |= ((1<<PORTB0)|(1<<PORTB3)|(1<<PORTB5)|(1<<PORTB1)|(1<<PORTB2)); //ножки SPI , CSN, MOSI, SCK
      DDRD |= (1<<PORTD6); //на выход CE
      DDRB &= ~(1<<PORTB4); //MISO на вход
      DDRD &= ~(1<<PORTD7); //IRQ на вход
      PORTB &= ~((1<<PORTB3)|(1<<PORTB5)); //низкий уровень  MOSI, SCK
      PORTB |= (1<<PORTB0); //высокий уровень CSN (0 - запись и чтение)
      PORTD |= (1<<PORTD6); //высокий уровень CE (прием-0, передача-1)
      PORTD |= (1<<PORTD7); // подтяжка IRQ к 1

TCCR1A=(1<<COM1A1) | (0<<COM1A0) | (1<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (1<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (1<<WGM12) | (0<<CS12) | (0<<CS11) | (1<<CS10);
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x40;
OCR1BH=0x00;
OCR1BL=0x80;


      SPCR = ((1<<SPE)|(1<<MSTR)|(1<<SPR0));//включим шину, объявим ведущим

   //передача байта в nrf24
      PORTB &= ~(1<<PORTB0); //низкий уровень CSN
      SPDR = 0x20;
      while(!(SPSR & (1<<SPIF)));//подождем пока данные передадутся
      SPDR = 0x3E;
      while(!(SPSR & (1<<SPIF)));//подождем пока данные передадутся
      data = SPDR;
      PORTB |= (1<<PORTB0); //высокий уровень CSN
     
    while (1)
    {
    }
}


Вернуться наверх
 
 Заголовок сообщения: Re: Atmega8, spi, pwm
СообщениеДобавлено: Ср июл 22, 2020 07:28:35 
Bald_79 писал(а):
подскажите где я туплю?
так на ногах PB1 и PB2 высокого уровня нет
Естественно, так как включен модуль SPI.

:shock: Каким образом включённый SPI может влиять на уровень вывода РВ2 а тем более на РВ1? Аппаратная часть SPI не может автоматически менять уровень на выводе SS (PB2).
Вложение:
1.png

из даташита:
Цитата:
19.3.2 Master Mode
When the SPI is configured as a Master (MSTR in SPCR is set), the user can determine the direction of the SS pin.
If SS is configured as an output, the pin is a general output pin which does not affect the SPI system.

Мастер режим
Если SPI настроен как мастер (установлен бит MSTR в SPCR), то пользователь
может задать желаемое направление вывода SS. Если SS настроен на выход, то он работает как обычная линия цифрового вывода и не оказывает влияния на систему SPI.

При конфигурации регистров SPI, вывод SS (РВ2) необходимо установить на выход и можно менять уровень на данном выводе в любой момент времени… в случае ТС это будет производить тааймер1 (в режиме работы ШИМ).


Вернуться наверх
   
 
Не в сети
 Заголовок сообщения: Re: Atmega8, spi, pwm
СообщениеДобавлено: Ср июл 22, 2020 07:58:34 
Первый раз сказал Мяу!
Аватар пользователя

Зарегистрирован: Пн фев 15, 2016 17:33:36
Сообщений: 24
Рейтинг сообщения: 0
Соберите мегу на макетке. К SPI ничего не подключайте, просто пусть ноги в воздухе болтаются, но код оставьте. На PB1, PB2 будет высокий уровень? Вот прям долж

Чистота эксперимента пропадет. Тогда передачи по spi не дождусь


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Atmega8, spi, pwm
СообщениеДобавлено: Ср июл 22, 2020 08:01:50 
Поставщик валерьянки для Кота

Карма: 12
Рейтинг сообщений: 532
Зарегистрирован: Ср июл 17, 2013 13:55:57
Сообщений: 1978
Рейтинг сообщения: 0
В даташите частично указано. Остальное из личного опыта.

Нигде там такого не указано. Наоборот прямым текстом сказано про ~SS.

Добавлено after 2 minutes 47 seconds:
Чистота эксперимента пропадет. Тогда передачи по spi не дождусь

Чистота эксперимента как раз-таки повышается. Я вон выше вывод привел. Всё должно работать. Варианта только 2 - где-то что-то у вас на плате мешает установится высокому уровню, или же вы что-то напутали. Ну еще маловероятный вариант паленой атмеги, которая таким странным образом глючит.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Atmega8, spi, pwm
СообщениеДобавлено: Ср июл 22, 2020 10:19:49 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
NStorm писал(а):
Нигде там такого не указано. Наоборот прямым текстом сказано про ~SS.
Ну а что тогда пытаетесь вогнать?
Код:
 //попытка установить высокий уровень
       DDRB|=((1<<PORTB1)|(1<<PORTB2));
       PORTB |=((1<<PORTB1)|(1<<PORTB2));


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 21 ]  1,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 29


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y