io_ports_atmega328

Обсуждаем контроллеры компании Atmel.
Ответить

Как у вас работают контроллеры/ардуины с АлиЭкспресс?

Работают без нареканий
14
61%
Иногда бывают непонятные баги
1
4%
Почти сразу выходят из строя
0
Голосов нет
Покупаю контроллеры в проверенных местах
4
17%
Радиодетали с Али - шайтан эксперимент
4
17%
 
Всего голосов: 23

Открыл глаза
Аватара пользователя
Сообщения: 76
Зарегистрирован: Чт янв 31, 2019 18:49:04
Откуда: Воронежская область

Сообщение bafomet911 »

всем драсти;) значит надо мне было сделать КА (энкодер) для управления некоторыми параметрами. сделать то получилось, но ушел на это целый человекодень. камень был в том, что обработчик энкодера все время возвращал нажатую кнопку. кнопка висела между землей и пином порта. китайцы пожалели на платке энкодера распаять подтяжку на шину питания. когда начал копать что к чему сделал так:

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

int main(void)
{
DDRD = 0b00000000;
PORTD = 0b11111111;
DDRB = 0b11111111;
PORTB = 0b00000000;
while(1)
if(PIND==0)
{
PORTB=1;
_delay_ms(300);
PORTB=0;
_delay_ms(300);
}
}
Кнопка на нулевом пине порта D, светилка на нулевом пине порта B. и вот тут меня пожидал сюрприз, кнопка отпущена, а светилка моргает.(светилка реагирует только на высокий уровень). дальше взял резистор 10к и подтянул кнопку к шине питания. о чудо, все заработало. но пытливый ум рукам покоя не дал. начал пробовать различные комбинации инициализации портов. каково же было мое удивление, когда контроллер продолжил работать даже когда порт кнопки инициализирован на выход, а порт светилки на вход. одним словом контроллер не реагировал на изменения регистров ddrx, даже когда я полностью закоментировал инициализацию портов, все продолжило работать. мультиметром был установлен низкий уровень на портах подтянутых внутренним резистором, правдо после сброса низкий уровень появлялся не сразу а через 3-8 секунд. проверил остальные атмеги мои. плата ардуино уно, плата ардуино промини и атмега в дип корпусе на макетке беспаечной показали одинаковый результат. (в среде менял девайсы- atmega328 и atmega328p, без изменений) важный момент-все мои атмеги с индексом p,были куплены в разное время на алиэкспрес. программатор usbisp оттуда же. среда - atmelstudio 7 с оф. сайта. теперь вопрос как можно выяснить что виновато в таком косяке, софт или железо? или может так и должно быть?
Изображение
Реклама
Друг Кота
Аватара пользователя
Сообщения: 15599
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Откуда оные (МК) поступают на рынок - Х/З...
:dont_know:
Однако при работе и под ассемблером и под адурино-IDE в рамках разумного проблем нет.
Единичные случаи повреждений (примерно 1 из 10) касается выводов "двойного назначения" - по умолчанию используемых как системные ресурсы (reset, кварц)...
Детальная диагностика тестированием под ассемблером позволяет отсеять проблемные случаи.
Однако - затраты времени и тренаж мозга штука в подобных случаях обыденная.
8)
Реклама
OKF
Это не хвост, это антенна
Сообщения: 1407
Зарегистрирован: Вт июн 07, 2011 08:03:18

Сообщение OKF »

Главное самому понимать что ты (сам) делаешь.))) Обычно, у новичков во всём виноват компилятор. На втором месте китайские контроллеры.)))
Открыл глаза
Аватара пользователя
Сообщения: 76
Зарегистрирован: Чт янв 31, 2019 18:49:04
Откуда: Воронежская область

Сообщение bafomet911 »

Спасибо за указанное направление. Давно хожу вокруг ассемблера.. но как то страшно исходники выглядят. За информацию по служебным пинам отдельное спасибо:) тоже попадалось.
Изображение
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

а почему сразу ассемблер?
если для того, чтобы узнать, как контроллер работает, то скачай алгоритм билдер - практически тотже ассемблер (тот же уровень) но ИМХО в освоении проще...
я бы посоветовал просто отказаться от ардуиновской надстройки и перейти на Си, а потом уже и сам поймешь в какую сторону идти. (может даже и обратно к ардуине :) за библиотеками...)
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Реклама
Друг Кота
Аватара пользователя
Сообщения: 15599
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Диагностику на уровне железных примитивов позволяет делать только ассемблер (уровень машинных команд).
Ибо там подразумевается АБСОЛЮТНО предсказуемое исполнение заданного теста.
8)
С другой стороны делать сложные/большого объёма программы под ассемблером ЕСТЬ ВЕИКИЙ САДОМАЗОХИЗМ (коим иногда маюсь).
:twisted:
Реклама
Открыл глаза
Аватара пользователя
Сообщения: 76
Зарегистрирован: Чт янв 31, 2019 18:49:04
Откуда: Воронежская область

Сообщение bafomet911 »

Вот иногда очень надо приблизиться к уровню машинных команд... Именно ассемблер мне теперь интересен. В дуиновских библиотеках итак алгоритмы и реализации КА подглядывают, чего тут греха таить. Пока только си больше всего и использую. В дуине регистры DDRX и PORTX обычно не юзают. Так же сдается мне что на асм лучше можно реализовывать драйверы устройств.. дисплей там или ещё чего. Чтоб больше места свободного под основной код оставалось.. поправьте если ошибаюсь. Часто приходится реализовывать кон. Автоматы.
Изображение
akl
Друг Кота
Сообщения: 4450
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

На ассемблере все делается проще. :)
По вопросу. Попробуйте сбросить WDT

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

; Turn off global interrupt
	cli
; Reset Watchdog Timer
	wdr

	CLR	R15
	OUT	MCUSR,R15
; Start timed sequence
	LDI	R16,1<<WDCE|1<<WDE
	STS   WDTCSR, r16
	CBR	R16,1<<WDE
	STS	WDTCSR,R16
Открыл глаза
Аватара пользователя
Сообщения: 76
Зарегистрирован: Чт янв 31, 2019 18:49:04
Откуда: Воронежская область

Сообщение bafomet911 »

На си макрос cli(); запрещает глобальные прерывания.. наверное так же и для сторожевого таймера прокатит. Пойду пробовать .

Добавлено after 40 minutes 53 seconds:
Полчаса с вашим кодом разбирался.. вы мой код переписали на асм!? Я правильно понял?
Изображение
akl
Друг Кота
Сообщения: 4450
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Нет, это программный запрет работы WDT. Просто, в конце прошлого года пришла партия ATmega168PAс разрешенным WDT, хотя FUSE-бит WDTON был незапрограммирован, собака работала и сбрасывала камень. DS по этому поводу блеет что-то невнятное. Пришлось программно запрещать работу собаки.
Друг Кота
Аватара пользователя
Сообщения: 15599
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Надо отслеживать ерраты и аппноты на сайте производителя (с точностью до буковки названия и диапазона дат выпуска).
Там много интересного...
Только вот у АВРок определить принадлежность к конкретной подгруппе(ревизии) весьма сложно (в отличии от ПИКовых).
:twisted:
Открыл глаза
Аватара пользователя
Сообщения: 76
Зарегистрирован: Чт янв 31, 2019 18:49:04
Откуда: Воронежская область

Сообщение bafomet911 »

Спасибо.... Вон оно как получается.. блин, на асм оказывается каждый раз надо вектор прерываний и размер памяти вначале кода писать... Пока темный лес, но увидел те же регистры ddr port pin. Самое главное узнал что эти регистры имеют адреса, которые вбиты в подключаемом файле инициализации. Эти же адреса видел в даташитах на контроллер. Т.е. я уже рядом с разгадкой тайны внутреннего резистора подтяжки. Собаку запретил в проэкте теста на си, без изменений.. мучаю асм. Сверяю адреса регистров в файлах инициализации с даташитом. Интересно жуть как.:)

Добавлено after 3 minutes 29 seconds:
[uquote="BOB51",url="/forum/viewtopic.php?p=3592553#p3592553"]Надо отслеживать ерраты и аппноты на сайте производителя (с точностью до буковки названия и диапазона дат выпуска).
Там много интересного...
Только вот у АВРок определить принадлежность к конкретной подгруппе(ревизии) весьма сложно (в отличии от ПИКовых).
:twisted:[/uquote]
У мну английский хромает :cry: не пинайте сильно :facepalm: знаю что стыдоба...
Изображение
akl
Друг Кота
Сообщения: 4450
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Ваш код на асм
Спойлер

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

.include "m328pdef.inc"

.equ	Fo=1000000

.org	0
	RJMP	START

START:
	ldi XL,low(RAMEND) 	;
	ldi XH,high(RAMEND)	;
	out SPH, XH		; 
	out SPL, XL		;загрузить стек 
					
; Turn off global interrupt
	cli
; Reset Watchdog Timer
	wdr

	CLR	R15
	OUT	MCUSR,R15
; Start timed sequence
	LDI	R16,1<<WDCE|1<<WDE
	STS   WDTCSR, r16
	CBR	R16,1<<WDE
	STS	WDTCSR,R16

GO:
	SER	R16
	OUT	DDRB,R16
	OUT	PORTB,R15
	OUT	PORTD,R16

	SBIC	PIND,0
	RJMP	PC-1

	OUT	PORTB,R16

	RCALL	DEL_300ms

	OUT	PORTB,R15

	RCALL	DEL_300ms

	RJMP	GO
;****
DEL_300ms:
	LDI	R20,BYTE3(300*Fo/1000/5)
	LDI	R21,BYTE2(300*Fo/1000/5)
	LDI	R22,BYTE1(300*Fo/1000/5)
WAIT_DEL:
	SUBI	R22,BYTE1(1)
	SBCI	R21,BYTE2(1)
	SBCI	R20,BYTE3(1)
	BRNE	WAIT_DEL

	RET
;****
.EXIT
Друг Кота
Аватара пользователя
Сообщения: 15599
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

bafomet911 писал(а):...
У мну английский хромает :cry: не пинайте сильно :facepalm: знаю что стыдоба...
Тогда поискать книги Евстифеева для освоения.
И какой-нить переводчик а-ля СОКРАТ(или гугль онлайн) для первоисточников.
Без инглиш (а в скором времени и ЧИНА) тяжко житие будеть...
:beer:
Открыл глаза
Аватара пользователя
Сообщения: 76
Зарегистрирован: Чт янв 31, 2019 18:49:04
Откуда: Воронежская область

Сообщение bafomet911 »

[uquote="akl",url="/forum/viewtopic.php?p=3592604#p3592604"]Ваш код на асм
Спойлер

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

.include "m328pdef.inc"

.equ	Fo=1000000

.org	0
	RJMP	START

START:
	ldi XL,low(RAMEND) 	;
	ldi XH,high(RAMEND)	;
	out SPH, XH		; 
	out SPL, XL		;загрузить стек 
					
; Turn off global interrupt
	cli
; Reset Watchdog Timer
	wdr

	CLR	R15
	OUT	MCUSR,R15
; Start timed sequence
	LDI	R16,1<<WDCE|1<<WDE
	STS   WDTCSR, r16
	CBR	R16,1<<WDE
	STS	WDTCSR,R16

GO:
	SER	R16
	OUT	DDRB,R16
	OUT	PORTB,R15
	OUT	PORTD,R16

	SBIC	PIND,0
	RJMP	PC-1

	OUT	PORTB,R16

	RCALL	DEL_300ms

	OUT	PORTB,R15

	RCALL	DEL_300ms

	RJMP	GO
;****
DEL_300ms:
	LDI	R20,BYTE3(300*Fo/1000/5)
	LDI	R21,BYTE2(300*Fo/1000/5)
	LDI	R22,BYTE1(300*Fo/1000/5)
WAIT_DEL:
	SUBI	R22,BYTE1(1)
	SBCI	R21,BYTE2(1)
	SBCI	R20,BYTE3(1)
	BRNE	WAIT_DEL

	RET
;****
.EXIT
[/uquote]

Изображение
ниче се разница в размере скомпилином....
для си:
СпойлерunOutputFileVerifyTask"
Program Memory Usage : 344 bytes 1,0 % Full
Data Memory Usage : 2 bytes 0,1 % Full
Done executing task "RunOutputFileVerifyTask".
Добавлено after 15 minutes 11 seconds:
уряяяяяяя!!! коректно все без внешнего резистора подтяжки!!!! АСМ Сцуко Сила Великая!!!! И я ею хочу овладеть!!! Путь Джедая вибираю одако я:)
СпойлерИзображение
Вывод-
1)косяк атмел студии!
2)китай атмеги имеют место быть:)

Всем добра!!!

Добавлено after 1 minute 38 seconds:
[uquote="akl",url="/forum/viewtopic.php?p=3592604#p3592604"]Ваш код на асм
Спойлер

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

.include "m328pdef.inc"

.equ	Fo=1000000

.org	0
	RJMP	START

START:
	ldi XL,low(RAMEND) 	;
	ldi XH,high(RAMEND)	;
	out SPH, XH		; 
	out SPL, XL		;загрузить стек 
					
; Turn off global interrupt
	cli
; Reset Watchdog Timer
	wdr

	CLR	R15
	OUT	MCUSR,R15
; Start timed sequence
	LDI	R16,1<<WDCE|1<<WDE
	STS   WDTCSR, r16
	CBR	R16,1<<WDE
	STS	WDTCSR,R16

GO:
	SER	R16
	OUT	DDRB,R16
	OUT	PORTB,R15
	OUT	PORTD,R16

	SBIC	PIND,0
	RJMP	PC-1

	OUT	PORTB,R16

	RCALL	DEL_300ms

	OUT	PORTB,R15

	RCALL	DEL_300ms

	RJMP	GO
;****
DEL_300ms:
	LDI	R20,BYTE3(300*Fo/1000/5)
	LDI	R21,BYTE2(300*Fo/1000/5)
	LDI	R22,BYTE1(300*Fo/1000/5)
WAIT_DEL:
	SUBI	R22,BYTE1(1)
	SBCI	R21,BYTE2(1)
	SBCI	R20,BYTE3(1)
	BRNE	WAIT_DEL

	RET
;****
.EXIT
[/uquote]

огромное спасибо за код на асм!!
Изображение
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Сообщение Dimon456 »

bafomet911 писал(а):АСМ Сцуко Сила Великая!!!! И я ею хочу овладеть!!! Путь Джедая вибираю одако я:)
bafomet911 писал(а):Вывод-
1)косяк атмел студии!
Может для начало стоило разобраться?
Спойлер

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

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

int main(void)
{
DDRD = 0b00000000;
PORTD = 0b11111111;
DDRB = 0b11111111;
PORTB = 0b00000000;

  	wdt_enable(WDTO_2S);
	wdt_reset();

while(1) 
   {
		//if(PIND==0)
		if((PIND & (1<<(0))) == 0)
		{
			PORTB=1;
			_delay_ms(300);
			PORTB=0;
			_delay_ms(300);
		}

	wdt_reset();
  }
}
или так
Спойлер

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

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

int main(void)
{
DDRD = 0b00000000;
PORTD = 0b11111111;
DDRB = 0b11111111;
PORTB = 0b00000000;
	
	cli();

	asm volatile ("wdr");
		
	MCUSR = 0x00;
	WDTCSR = 1<<WDCE|1<<WDE;
	WDTCSR &= ~(1<<WDE);

while(1) 
   {
		//if(PIND==0)
		if((PIND & (1<<(0))) == 0)
		{
			PORTB=1;
			_delay_ms(300);
			PORTB=0;
			_delay_ms(300);
		}

  }
}
Открыл глаза
Аватара пользователя
Сообщения: 76
Зарегистрирован: Чт янв 31, 2019 18:49:04
Откуда: Воронежская область

Сообщение bafomet911 »

Завтра домой прибуду когда я, испробовать непременно придется:) асм сила светлая ещё как минимум по двум причинам.. меньше флеша занимаем, работаем быстрее-предсказуемее.. даже аврдудка почему-то шьёт быстрее.. наверное из-за разницы в размере хекс файла.

Добавлено after 52 minutes 15 seconds:
На асм коде то собаку не вырубали... И все жило как положено. Планирую посмотреть io.h .. найти там адреса регистров и проверить их на соответствие дата шиту. Си надо приводить в порядок, ибо на нем мне удобнее основную программулину писать. А на асме хочу попробовать драйвера делать.. как то так. Щас в любых моих исходниках структура такая:
main.c
main.h
железка_1.с
железка_1.h
железка_2.с
железка_2.h
В каждом хедере железок прототипы только на функции, которые вызываются из майн.с
Так и планирую в дальнейшем делать. Только файлы драйверов планирую реализовать на асм. Правдо с ним для начала надо разобраться.. и ещё пока не представляю как код си общается с кодом асм..
Изображение
Друг Кота
Аватара пользователя
Сообщения: 15599
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Ассемблер "в чистом виде" и ассемблер под Си (ассемблерные вставки) весьма в "мелочах" отличаются!
(смотри документацию применяемого компилятора Си по правилам и правописанию вставок на ассемблере!)
Иногда настолько, что способны весьма сильно настроение подпортить.
8)
Открыл глаза
Аватара пользователя
Сообщения: 76
Зарегистрирован: Чт янв 31, 2019 18:49:04
Откуда: Воронежская область

Сообщение bafomet911 »

Спасибо за указанное направление :) возьму на вооружение.
Изображение
afz
Опытный кот
Аватара пользователя
Сообщения: 744
Зарегистрирован: Сб дек 22, 2012 08:17:42
Откуда: Караганда, Казахстан

Сообщение afz »

BOB51 писал(а):Тогда поискать книги Евстифеева для освоения.
У Ди Халта неплохой учебник по асму. Спросить у Яндекса "di halt avr. учебный курс", первая же ссылка.
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Ответить

Вернуться в «AVR»