BG Development


Страници: (2) [1] 2   ( Първото ново мнение ) Reply to this topicStart new topicStart Poll

> Помощ за работа с Ардуино
UnoR3
  Публикувано на: 27-09-2021, 02:10
Quote Post



Име:
Група: Потребител
Ранг: Новопостъпил

Мнения: 2
Регистриран на: 26.09.21



Здравейте!

Първо искам да се извиня ако това не е точният раздел, както и да кажа, че не съм програмист. Поне не и на софтуер за РС. Работя вече близо 5 години като програмист на ММ с ЦПУ. Първоначално на центри СМ032, а в момента на абкант, лазер и програмна преса.

Проблемът се състои в това, че реших да изкарам магистратура в чужбина. До тук добре, но имам предмет наречен "Електронни системи и индустриална екипировка" и трябва да се науча да програмирам Ардуино да извършва определени операции, само че, не ми позволяват да ползвам езика на Ардуино (който е нещо между С и С++), а трябва да работя с регистрите.

Надявам се да успея да онагледя за какво говоря с този малък пример.

Не мога да го напиша така:

CODE

1 void setup () {
2    pinMode(9, OUTPUT); // Set D9 as output
3 }
4
5 void loop() {
6     digitalWrite(9, HIGH); // Set D9 to high
7 }



А трябва да бъде по този начин:

CODE

1 void setup () {
2    DDRD = B00000010; //Set D9 as output
3 }
4
5 void loop () {
6    PORTD = B00000010; // Set D9 to high
7 }



Може би не търся правилно из нета, но поне аз не намирам пълно ръководство за програмиране с регистрите на Ардуино, само откъслечни примери. Като начинаещ в тази област с нула опит в програмирането за РС се надявам да ми помегнете да намеря достъпна литература по въпроса, може и на английски.

Защо не питам преподавателя? Ами вече го питах и той каза, че това е лесно и нямам нужда от допълнителна литература, а аз кьорава програма да светна един LED не мога да напиша. icon_confused.gif

Благодаря предварително за помощта!

Това мнение е било редактирано от UnoR3 на 27-09-2021, 02:15
PMEmail Poster
Top
ici
Публикувано на: 27-09-2021, 02:31
Quote Post


Group Icon
Име: Ивайло Илчев
Група: VIP
Ранг: Почетен член

Мнения: 17685
Регистриран на: 06.06.04





--------------------
Ние не сме в една лодка, ние сме в една буря. Лодките са различни.

Следващият път когато се почувстваш ненужен, грозен и недооценен, помни че освен това си и тъп.
PMEmail PosterUsers Website
Top
UnoR3
Публикувано на: 27-09-2021, 02:52
Quote Post



Име:
Група: Потребител
Ранг: Новопостъпил

Мнения: 2
Регистриран на: 26.09.21



Благодаря за бързият отговор!
PMEmail Poster
Top
Дон Реба
Публикувано на: 27-09-2021, 07:03
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 9538
Регистриран на: 11.11.06



то няма "регистри на ардуино", уно е с един процесор, дуе е с друг,мегае с трети.
освен процесора ти трябва и схема на борда,за да видиш кой крак/регистър на кой пин е мапнат.
а, и между другото езика на ардуино е чист С++
PM
Top
thrawn
Публикувано на: 27-09-2021, 08:23
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 3166
Регистриран на: 17.01.17



Само да вметна, че подобно сетване на цял байт може да извърти кофти номер, ако се прави в тялото на програмата (че и в setup-а де). Затова е хубаво всички операции касаещи отделни битове да се правят така, че да се запазват стойностите на битовете които не се променят. За целта се ползват побитови операции AND, OR и XOR (нулиране, сетване и инвертиране) а маската се формира динмаично с шифтиране на ляво на 1-ца.
PMEmail Poster
Top
dvader
Публикувано на: 27-09-2021, 14:09
Quote Post


Group Icon
Име:
Група: VIP
Ранг: Почетен член

Мнения: 4943
Регистриран на: 12.07.05



QUOTE (thrawn @ 27-09-2021, 08:23)
Само да вметна, че подобно сетване на цял байт може да извърти кофти номер,

Може да се спори.
Първо, често тия регистри са само за запис, демек ако искаш да прочетеш какво има в тях трябва сам да си го запазиш, което значи, че пак трябва да почнеш със запис на цял байт.
Второ, така ще променяш нужните за теб битове, ама няма да знаеш в какъв режим са другите и ще трябва да се надяваш някой друг да ги е инициализирал правилно. Може да се окаже по-добре да установиш всичко явно.

Не ми се спори icon_smile.gif


--------------------
I find your lack of faith disturbing
PM
Top
thrawn
Публикувано на: 27-09-2021, 14:55
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 3166
Регистриран на: 17.01.17



Ми то няма какво да се спори...

Ако искаш да сетнеш бит се ползва нещо такова
CODE
PORTD |= (1 << 5);

като 5 е съответния бит - това обикновено са имена (така де, константи...) дефинирани в хедър файловете на/за съответния контролер (точно както PORTD, да речем).

После ако искаш да го свалиш тоя бит
CODE
PORTD &= ~(1 << 5);


А ако ти трябва да го инвертираш
CODE
while(1) {
   PORTD ^= (1 << 5);
   delay(1000);
}


Така не ти трябва да следиш останалите битове на PORTD, които могат де се ползват за друго нещо в друга част от програмата.

Това мнение е било редактирано от thrawn на 27-09-2021, 15:09
PMEmail Poster
Top
Дон Реба
Публикувано на: 27-09-2021, 15:17
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 9538
Регистриран на: 11.11.06



в случая е все тая, а практиката винаги да се сетват отделни битове като цяло не е добра - преценява се ситуацията и се решава. може да е важно смяната да стане едновременно, например ако клатиш някакъв Н-мост
PM
Top
thrawn
Публикувано на: 27-09-2021, 17:42
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 3166
Регистриран на: 17.01.17



Нямам в предвид винаги да се сетват отделни битове, а да се сетивата само битовете които ти трябват. Няма проблем да използваш побитови операции за да седнеш 2, 4 или колкото там бита ти трябват на веднъж. Просто няма да си правиш маската със шифтиране.

С други думи, това което обяснявам е не как да се сетне бит а как да не се затрият другите битове.

Това мнение е било редактирано от DarkOne на 28-09-2021, 06:18
PMEmail Poster
Top
dvader
Публикувано на: 27-09-2021, 17:53
Quote Post


Group Icon
Име:
Група: VIP
Ранг: Почетен член

Мнения: 4943
Регистриран на: 12.07.05



QUOTE (thrawn @ 27-09-2021, 14:55)
Ми то няма какво да се спори...

Сега си представи, че PORTD при четене винаги връща 0 или 0xFF...


--------------------
I find your lack of faith disturbing
PM
Top
1 потребители преглеждат тази тема в момента (1 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Страници: (2) [1] 2  Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2019 | BG Development | All Rights Reserved
RSS 2.0