Мигать светодиодом. ARM или не-ARM?

Флейм в чистом виде - все что угодно...
Но - в рамках закона :)
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3384
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: Мигать светодиодом. ARM или не-ARM?

Сообщение Мурик »

oleg110592 писал(а):Used FLASH: 68 bytes out of 1024 bytes (6%)
Есть ЯП, которой называется FastAVR. Его код.
Спойлер

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

$Device= tiny13		  ' used device
$Stack = 16				' stack depth
$Clock = 1			    ' adjust for used crystal

DDRB.1 = 1

Do						' place your code in next line
  Toggle PORTB.1
  WaitMs 1000
Loop
скомпилировался в 42 байта. Ассемблерный листинг, из которого создается hex компилятором avrasm32.
Спойлер

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

.include	"FastAVR\inc\tn13def.inc"
;
		.DSEG
		
		.CSEG
.ORG	0

_Reset:
		ldi		yl,low(RAMEND)
		out		SPL,yl
		sbiw	yl,16

;******	USERS BASIC CODE **********************

;-Line--0009----DDRB.1 = 1--
		sbi		DDRB,1

;-Line--0011----Do						' place your code in next line--
L0000:

;-Line--0012----Toggle PORTB.1--
		in		zl,PORTB
		ldi		r23,0x02
		eor		zl,r23
		out		portb,zl

;-Line--0013----waitms 1000--
		ldi		zl,low(1000)
		ldi		zh,high(1000)
		rcall	_Wms

;-Line--0014----Loop--
		rjmp	L0000
L0001:

;****** END OF USER BASIC CODE ****************


;////// _Waitms ///////////////////////////
_Wms:	ldi		r20,0x14
_Wms1:	ldi		r21,0x11
_Wms2:	dec		r21
		brne	_Wms2
		dec		r20
		brne	_Wms1
		dec		zl
		brne	_Wms
		ret
Реклама
Lublu_megy
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Вт дек 12, 2017 16:52:57
Откуда: Вам широту и долготу скинуть?

Re: Мигать светодиодом. ARM или не-ARM?

Сообщение Lublu_megy »

Цитаты:
Спойлер[uquote="oleg110592",url="/forum/viewtopic.php?p=3352979#p3352979"]Мигание светодиодом на PIC12F629 (выкрал код с пиковой темы :)) )
Чутка поправил, чтоб работало:
Спойлер

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

#pragma config FOSC = INTRCIO  // 
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = ON       // Power-Up Timer Enable bit (PWRT enabled)
#pragma config MCLRE = OFF       // 
#pragma config BOREN = ON       // Brown-out Detect Enable bit (BOD enabled)
#pragma config CP = OFF         // Code Protection bit (Program Memory code protection is disabled)
#pragma config CPD = OFF        // Data Code Protection bit (Data memory code protection is disabled)

// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.

#include <xc.h>

#define  _XTAL_FREQ 4000000

void main(void){
    //Вспомогательная переменная
    //для организации временной задержки
    unsigned long counter;
     
    //Настройка портов ввода/вывода PIC12F675
    //Выключение подтягивающих резисторов
    WPU = 0x00;
   
    //Запретить использование подтягивающих резисторов
    OPTION_REGbits.nGPPU = 1;
    // отключить компаратор 
    CMCON = 0x07;
     
    //Настрока выходов GP4, GP5 на выход
    TRISIO = 0;
     
    //Установка на выходах GP4, GP5 лог. 0
    GPIO = 0;
     
    //Бесконечный цикл.
    while(1){
        GPIObits.GPIO4 ^=1;   //выв. 3 инверсия бита 4
        //Задержка на 1 сек
        __delay_ms(1000);
    }
}
Изображение[/uquote]
[uquote="oleg110592",url="/forum/viewtopic.php?p=3352999#p3352999"][uquote="Lublu_megy",url="/forum/viewtopic.php?p=3352735#p3352735"]... и не работает[/uquote]
поправил, расположил тут:
http://radiokot.ru/forum/viewtopic.php? ... 9#p3352979
в протеусе мигает
з.ы. у этих пиков, насколько помню, в начале программы должна быть команда загрузки константы для внутреннего RC генератора или переход в конец. А компилятор вроде с давних времен код с конца размещал.[/uquote]
Урааа!!! Работает!! Только надо было поправить GPIO4 на GPIO2. Я рад как ребёнок!!!!11 :)) :lol: :) 8) :love: :wink: :))) :idea:
Изображение
Код:
Спойлер

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

#pragma config FOSC = INTRCIO  // 
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = ON       // Power-Up Timer Enable bit (PWRT enabled)
#pragma config MCLRE = OFF       // 
#pragma config BOREN = ON       // Brown-out Detect Enable bit (BOD enabled)
#pragma config CP = OFF         // Code Protection bit (Program Memory code protection is disabled)
#pragma config CPD = OFF        // Data Code Protection bit (Data memory code protection is disabled)

// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.

#include <xc.h>

#define  _XTAL_FREQ 4000000

void main(void){
    //Вспомогательная переменная
    //для организации временной задержки
    unsigned long counter;
     
    //Настройка портов ввода/вывода PIC12F675
    //Выключение подтягивающих резисторов
    WPU = 0x00;
   
    //Запретить использование подтягивающих резисторов
    OPTION_REGbits.nGPPU = 1;
    // отключить компаратор 
    CMCON = 0x07;
     
    //Настрока выходов GP4, GP5 на выход
    TRISIO = 0;
     
    //Установка на выходах GP4, GP5 лог. 0
    GPIO = 0;
     
    //Бесконечный цикл.
    while(1){
        GPIO2 ^=1;   //выв. 3 инверсия бита 4
        //Задержка на 1 сек
        __delay_ms(1000);
    }
}
(PIC12F629 BLINK блинк)
Вложения
worked_test.X.production.hex
pic12f629 blink
(215 байт) 380 скачиваний
MAIN.c
pic12f629 blink C
(1.42 КБ) 561 скачивание

ааааааааааааааааааааааааа็аааааааааааааааааааааааа็аааааааааааааааааааааааа, I love this.ааааааааааааааааааааааааа็аааааааааааааааааааааааа็аааааааааааааааааааааааа

Реклама
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Мигать светодиодом. ARM или не-ARM?

Сообщение oleg110592 »

[uquote="Мурик",url="/forum/viewtopic.php?p=3354381#p3354381"]Есть ЯП, которой называется FastAVR[/uquote]
Сообразительный FastAVR - если прерываний нет, то и таблицу прерываний и не надо.
На ассемблере AVR:
Спойлер

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

.include <tn13def.inc>
.cseg
.org $000

    ldi       R16, 0x9F  
    out       SPL, R16  
    sbi       DDRB, 0    
loop:
    in        R16, PORTB  
    ldi       R17, 0x01  
    eor       R16, R17   
    out       PORTB, R16  
; Generated by delay loop calculator
; at http://www.bretmulvey.com/avrdelay.html
;
; Delay 9 600 000 cycles
; 1s at 9.6 MHz
    ldi  r18, 49
    ldi  r19, 180
    ldi  r20, 102
L1: dec  r20
    brne L1
    dec  r19
    brne L1
    dec  r18
    brne L1
    rjmp loop
34 байта
Изображение

Если сделать delay подпрограммой - будет практически то же, что и FastAVR.
Можно и подсократить, как выше предлагалось аппаратной фичей AVR, но не спортивно - у других микроконтроллеров такого нет, да и не у всех AVR тоже присутствует.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18673
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Мигать светодиодом. ARM или не-ARM?

Сообщение ARV »

oleg110592 писал(а):подсократить, как выше предлагалось аппаратной фичей AVR, но не спортивно - у других микроконтроллеров такого нет, да и не у всех AVR тоже присутствует
то есть рассказывать про DMA у ARM это спортивно, а применение других аппаратных особенностей контроллеров - не спортивно?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Мигать светодиодом. ARM или не-ARM?

Сообщение oleg110592 »

[uquote="ARV",url="/forum/viewtopic.php?p=3354518#p3354518"]то есть рассказывать про DMA у ARM это спортивно[/uquote]
ну конечно же, ведь у AVR теперь есть шанс обзавестись DMA - Микрочип то древние 8-ми битные PIC18 оснастил DMA:
http://www.microchip.com/promo/pic18f-k42
В новых мегах уже заявлено Event System, не разбирался можно ли мигать с помощью:
The Event System can directly connect peripherals such as ADCs, analog comparators, I/O port pins, the
real-time counter, timer/counters, and the configurable custom logic peripheral. Events can also be
generated from software.
https://www.microchip.com/wwwproducts/en/ATMEGA3208
может кто из любителей AVR расскажет в теме...
з.ы. в STM32 Event есть
Event — это событие (аппаратное или программное), на которое могут реагировать ядро или периферийные блоки. Одним из вариантов реакции может быть — прерывание.
Реклама
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18673
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Мигать светодиодом. ARM или не-ARM?

Сообщение ARV »

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

Мой уютный бложик... заходите!
Реклама
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3384
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: Мигать светодиодом. ARM или не-ARM?

Сообщение Мурик »

oleg110592 писал(а):не разбирался можно ли мигать с помощью
С помощью DMA точно можно. http://www.cyberforum.ru/blogs/204791/blog5169.html
А при необходимости возможно без прерываний и использования процессора осуществить динамическую индикацию. http://www.cyberforum.ru/blogs/204791/blog5170.html
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Мигать светодиодом. ARM или не-ARM?

Сообщение oleg110592 »

С помощью DMA и RGB светодиодами WS2112B легче управлять, dosikus в теме все раскладки в картинках ранее давал.
Вот например без SPI и жестких таймингов:
https://geektimes.ru/post/255548/
После этой инициализации начинается автоматическая пересылка битового потока из массива DMA_buf расположенного в ОЗУ на внешний вывод 8 GPIOB. Автоматически генерируется и 50-и микросекундная пауза сброса. Процессор в пересылке никак не участвует, не используются даже прерывания.
Нельзя сказать, что данный механизм вообще не влияет на процессор. Его работа несколько замедляется. Поскольку он разделяет вместе с DMA общий доступ к ОЗУ и системной шине. Но измерения показали, что это замедление в данном случае не превышает 0.2%
Ну теперь блинканье MSP430:

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

int main()
{
	WDTCTL = WDTPW | WDTHOLD;
	P1DIR |= (1 << 0);
	for (;;)
	{
		P1OUT ^= (1 << 0);
		Delay();
	}
}
листинг (красиво):

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

.LFB1:
	mov	#23168, WDTCTL
	bis.b	#1, P1DIR
.L5:
	xor.b	#1, P1OUT
	call	#Delay
	jmp	.L5 
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: Мигать светодиодом. ARM или не-ARM?

Сообщение dosikus »

[uquote="Мурик",url="/forum/viewtopic.php?p=3354594#p3354594"]А при необходимости возможно без прерываний и использования процессора осуществить динамическую индикацию. http://www.cyberforum.ru/blogs/204791/blog5170.html[/uquote]

Внимательно смотрим на дату публикации...
http://kazus.ru/forums/showpost.php?p=7 ... ostcount=8

Да и то что на кибере - жалкое подобие...
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3384
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: Мигать светодиодом. ARM или не-ARM?

Сообщение Мурик »

Тот код что на казусе полностью использует порт (т. к. запись в ODR) в отличие от cyberforum где запись в BSRR и возможно свободные выводы использовать для других целей. Так что вы не правы (наверное даже код не смотрели).
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: Мигать светодиодом. ARM или не-ARM?

Сообщение dosikus »

[uquote="Мурик",url="/forum/viewtopic.php?p=3355384#p3355384"]Тот код что на казусе полностью использует порт (т. к. запись в ODR) в отличие от cyberforum где запись в BSRR и возможно свободные выводы использовать для других целей. .[/uquote]

А кто тебе сказал, что при использовании ODR нельзя юзать незадействованные в LED индикации пины ?
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3384
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: Мигать светодиодом. ARM или не-ARM?

Сообщение Мурик »

Массив записывается через DMA в ODR и можно использовать выводы разве что изменяя биты в массиве. Если программно записывать что-то в ODR или BSRR, при следующей DMA транзакции данные будут потерты содержимым массива. Если DMA пишет в BSRR этой проблемы нет.
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: Мигать светодиодом. ARM или не-ARM?

Сообщение dosikus »

Думай дальше...
Аватара пользователя
ART_ME
Друг Кота
Сообщения: 3011
Зарегистрирован: Вс окт 02, 2016 07:34:45

Re: STM32 - краткий результат исследования применимости.

Сообщение ART_ME »

[uquote="balmer",url="/forum/viewtopic.php?p=3010873#p3010873"]Автор темы прав в том, что за один день не изучить STM32.[/uquote]Автор темы прав в том, что не имеет совершенно никакого смысла STM32 изучать.
Ибо прошло больше года, и хотя за это время отнюдь не однажды возникала потребность в использовании STM32, всякий раз находилось более простое, надежное и дешевое техническое решение.
Аватара пользователя
Upgrader
Друг Кота
Сообщения: 26671
Зарегистрирован: Пт май 18, 2007 22:56:58

Re: STM32 - краткий результат исследования применимости.

Сообщение Upgrader »

[uquote="ART_ME",url="/forum/viewtopic.php?p=3009537#p3009537"]Как это ни печально, но на сегодня STM32 оказался не готов к практическому использованию.[/uquote]А что готово? Где альтернатива? :shock: :o
Не променяю медь на ржавую несгорайку!
Аватара пользователя
Baasil
Говорящий с текстолитом
Сообщения: 1641
Зарегистрирован: Пн авг 25, 2014 21:52:26
Откуда: Ленинград

Re: STM32 - краткий результат исследования применимости.

Сообщение Baasil »

Ну как же - AVR! Под них столько готового кода - бери и копипасти :)
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Мигать светодиодом. ARM или не-ARM?

Сообщение oleg110592 »

Мигаем ARMом (STM32F0):
Спойлер

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

int main(void)
{
    SysTick_Config(48000000U / 1000); // SysTick 1 msec interrupts
    RCC->AHBENR |= RCC_AHBENR_GPIOAEN; // Power up PORTA
    GPIOA->MODER |= (GPIO_MODER_MODER4_0); // make bits PA4 PA0 an output

    for (;;)
    {
        GPIOA->ODR ^= GPIO_ODR_4; 	// Turn specified LED on
        Delay(1000);                	// Wait 1000ms
    }
}
Листинг:
Спойлер

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

L3.58|
        LDR      r0,[r4,#0x14]      
        EORS     r0,r0,r5           
        STR      r0,[r4,#0x14]      
        MOV      r0,r6
        BL       Delay
        B        |L3.58|
Пробуем "Bit Banding" STM32F4 (не для STM32F0)
Почитать:
http://we.easyelectronics.ru/STM32/stm3 ... nding.html
http://www.gaw.ru/html.cgi/txt/doc/micr ... /2_3_7.htm

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

вместо GPIOA->ODR ^= GPIO_ODR_4; 	// Turn specified LED on
тулим BIT_BAND_PER(GPIOA->ODR, GPIO_ODR_ODR_4) ^= 1;
Листинг :
Спойлер

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

|L3.52|
        LDR      r0,[r4,#0x290]  
        EOR      r0,r0,#1        
        STR      r0,[r4,#0x290]  
        MOV      r0,r5
        BL       Delay
        B        |L3.52|
не очень попустило - правда r5 при ксоре не используется
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Мигать светодиодом. ARM или не-ARM?

Сообщение oleg110592 »

интересный проектик на не-ARM:
Компьютер Радио-86РК за $3? Реально!
Алексей Пресняков (heavy) из г. Орёл разработал очень любопытный проект – программно-аппаратный эмулятор легендарного компьютера Радио-86РК. Свой проект Алексей посвятил отцу, который привил ему любовь к компьютерной технике, собственноручно собрав в своё время Радио-86РК.
Уникальность данного проекта заключается в том, что в основе аппаратного обеспечения лежит дешёвый чип ESP8266, основное предназначение которого – обеспечение беспроводной связи. Однако автору проекта удалось задействовать ресурсы этого электронного компонента для эмуляции ретро-компьютера. Помимо собственно ESP8266 в компьютере используется только ещё одна совсем недорогая микросхема, мелочёвка в виде резисторов и регулятора напряжения, а также разъёмы. Таким образом себестоимость готового устройства находится в районе $3-$5.
http://zx-pk.ru/content/365-Kompiuter-R ... a-3-Realno!
:cry: (ностальгическая слеза)
Morroc
Друг Кота
Сообщения: 19495
Зарегистрирован: Чт фев 20, 2014 18:57:55

Re: STM32 - краткий результат исследования применимости.

Сообщение Morroc »

[uquote="ART_ME",url="/forum/viewtopic.php?p=3358673#p3358673"]Ибо прошло больше года, и хотя за это время отнюдь не однажды возникала потребность в использовании STM32, всякий раз находилось более простое, надежное и дешевое техническое решение.[/uquote]
Хорошо если так, но если процессор какой то все равно нужен - почему бы и не этот, чисто на всякий случай - вдруг надо будет расширить, углубить, ускорить...
"Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
Lublu_megy
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Вт дек 12, 2017 16:52:57
Откуда: Вам широту и долготу скинуть?

Re: Мигать светодиодом. ARM или не-ARM?

Сообщение Lublu_megy »

[uquote="oleg110592",url="/forum/viewtopic.php?p=3360807#p3360807"]Компьютер Радио-86РК за $3? Реально!Уникальность данного проекта заключается в том, что в основе аппаратного обеспечения лежит дешёвый чип ESP8266, основное предназначение которого – обеспечение беспроводной связи.[/uquote]
У меня как раз ESP8266 лежит... Но мне леееень повторять такое :?

Добавлено after 36 minutes 41 second:
Всем привет! Уже давно прикупил STM32F103C8T6. Скачал Keil (ломанул), с мучениями поставил CMSIS, а как блинкать светодиодом на PC13 так и неразобрался :( (наверное из-за своей лени). Надыбал код, который моргает светодиодом, но так и не понял, как оно всё работает. Может у кого есть для меня очень понятное объяснение или блинк на CMSIS у которого Program Size примерно такой: Code=708 RO-data=252 RW-data=0 ZI-data=1632.

Вот код моей недобиблиотеки и MAIN.C:
Спойлер

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

//#include "stm32f10x.h"
#include "MyLibs/multitool.h"
int main(void)
{
    *((int*)0x40021018) = 0x00000010; // RCC_APB2ENR = RCC_APB2ENR_IOPCEN
    *((int*)0x40011004) = 0x00100000; // GPIOC_CRH = MODER_OUTPUT_13

    while(1)
    {
        *((volatile int*)0x4001100C) ^= 0x00002000; // GPIOC_ODR ^= BIT_13
        //int i; for (i=5000000; i>0; i--) ;
			  multi_delay(100);  
 		}	
		
}

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

/*
	simple Multitool lib for stm32/arduno.
	(c) Lublu_megy
*/


#define __multitool_h_H

void multi_delay(int milliseconds) // Delay Function (milliseconds)
{
	int milliseconds_imported = milliseconds * 10000; //Convent NanoSeconds in Milliseconds
	 
	for (milliseconds=milliseconds_imported; milliseconds>0; milliseconds--); //Delay
	
}

P.S.: Keil ничего не знает про RCC_APB2ENR и RCC_APB2ENR_IOPCEN.

ааааааааааааааааааааааааа็аааааааааааааааааааааааа็аааааааааааааааааааааааа, I love this.ааааааааааааааааааааааааа็аааааааааааааааааааааааа็аааааааааааааааааааааааа

Ответить

Вернуться в «МЯЯЯУ!»