Отговори на тема  [ 20 мнения ]  Отиди на страница 1, 2  Следваща
Въпрос на съвсем начинаещ 
Автор Съобщение
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пон Окт 26, 2015 10:14 pm
Мнения: 46
Мнение Въпрос на съвсем начинаещ
Здравейте, нов съм във форума и още по нов в тематиката, така че моля да бъда извинен, ако задам и някой глупав въпрос, но следвам принципа,
че не е лошо да питаш, лошо е, ако питаш два пъти за едно и също...

Предварително искам да уточня, че имам практически ориентирана насоченост към автомобилна електроника - автоматизация, информационни дисплеи
и по-точно:
-изписване на някаква информация на дисплей при аналогов сигнал от датчик /обикновено + или маса/ и/или
-команда към друго изпълнитено устройство след получаване на такъв сигнал на вход.

Засега толкова, повече - по-нататък.
Наясно съм с аналоговата схемотехника, но тук нещата очевидно са различни.

Сега на въпроса:
Успях да подкарам приложения примерен код с PIC16F887 и LCD дисплей с
програматор PicKit3(реплика), MPLAB X IDE и MPLAB IPE, с което няма как да не се гордея.

Тъй като появата на тези редове на дисплея в момента не ми върши никаква работа, ще се намери ли някой добър човек,
който да промени в така приложения код:

1. Конфигуриране напр. на RB0 като аналогов вход;
2. При получаване на сигнал /-/ на RB0 , на екрана да се изпише текст "GROUND" и да стои там, докато стои сигнала.

Иска ми се да развия проекта стъпка по стъпка, по пътя на логиката, а не да търся някой да ми напише 20 реда програма наготово,
защото знам, че всеки си цени времето и труда.

И като стана въпрос за време и труд, след като дълго се блъсках из нета като грешен дявол, в главата ми изникна и друг прост въпрос:
Как да се ориентира начинаещия кандидат за ПИК програмист в морето от езици за програмиране, към кой език точно да се насочи и да задълбае в него, докато стане що-годе наясно с писането на проста програма? Защото колкото пъти попадам на примери, които ме интересуват, всеки път използвания език сякаш е различен. Т.е. ползвани са различни програми за писане, уж всички на С, С++ или С#, а синтаксиса видимо се различава /MikroC, MPLAB XC8, CSS C, Hi Tech C и т.н/. Къде да се насочи човек за да не хаби напразно време и ресурс?
Предварително благодаря на тези, които се отзоват, защото без конкретна помощ сме заникъде.


Прикачени файлове:
LCD Code.txt [2.29 KiB]
312 пъти
LCD.jpg
LCD.jpg [ 237.89 KiB | Прегледано 5679 пъти ]
Пон Окт 26, 2015 10:18 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Чет Юни 25, 2009 1:01 pm
Мнения: 2251
Мнение Re: Въпрос на съвсем начинаещ
Относно това с какво да започнеш - аз лично бих ти препоръчал CCS. Подходящ е за начинаещи. Ето книжка Цък . За по-обикновени проекти аз го предпочитам понеже има т. нар. header file, който съдържа предварително дефинирани константи, както и много готови функции! Употребата му е доста лесна! Не е нужно да бъркаш постоянно в регистри и да зареждаш стойности. Доста е бъгав, но на първо време мисля, че няма да имаш забележки! Има го в раздел софтуер. За по-сложни неща аз предпочитам тези на майкрочип - XC и C сериите!
Реално всички продукти са добри! Въпрос на предпочитания!
Като гледам този код прилича, на XC или C!Това, което искаш да постигнеш не е сложно! Просто разгледай какво пише за съответния къмпайлър! Повече информация има в AN на майкрочип! Но аз мисля ако започнеш с книжката, където доста подробно обясняват доста неща, за ден 2 ще можеш да си напишеш собствена програма! Не съм сигурен дали в случая трябва да напиша направо решението, защото предполагам искаш да се научиш!
Поздрави!

_________________
www.elkran.com


Пон Окт 26, 2015 11:40 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пет Фев 04, 2005 9:59 pm
Мнения: 6019
Местоположение: София
Мнение Re: Въпрос на съвсем начинаещ
stoyanoff написа:
Това, което искаш да постигнеш не е сложно!

Напротив сложно е.
Трябва първо да си избере език и компилатор за него. Да научи синтаксиса на езика и командите на компилатора.
След това да размига светодиод. После да прочете бутон. Пропускам следващите 50 стъпки.
После да инциализира дисплей и да пише по него. След това да прочете ADC пин. И най-накрая да свърже всичкото това в работеща програма.
В момента е сложил тавата във фурната и казва: Фурната е нагрята до 200 градуса и тавата е вътре, сега какво? Яйца ще ми трябват ли?

_________________
Warriors of the Night, ASSEMBLER!!!


Пон Окт 26, 2015 11:52 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пон Окт 26, 2015 10:14 pm
Мнения: 46
Мнение Re: Въпрос на съвсем начинаещ
Благодаря за отговорите досега, особено за посочената литература. Ще се запозная подробно и дано е обяснено добре, че досега съм попаднал измежду десетки, само на един автор, който знае как да обяснява. Берт, който, ако правилно съм разбрал е участвал в разработката на отделен език, подобен на Паскал, JAL. За съжаление, тъкмо го бях захванал и осъзнах, че не е много разпространен и нямаше да ми е от практическа полза, що се отнася до популярност.
Сега конкретно по въпроса:
Според примера, кода е написан на MPLAB XC8, каквото и да значи това. Наистина бих бил благодарен на два реда примерен код в същата програма, ако не е прекалено, защото, както вече споменах, най добре се уча от практиката, когато експериментирам, как стават нещата в реалния свят. Ако видя, как става с един бутон на входа, лесно ще го направя с десет такива. Ако видя, как става с диод на изхода, лесно ще го заменя с реле и т.н. Иначе ми малко ми е късно да ставам програмист на тези години и предпочитам да усвоявам материята поетапно, по реда по който необходимостта се появява.

Сега си мисля, че са ми нужни да науча около 20-тина израза, за да си върша работата. Със сигурност греша, но щом времето ме опровергае, ще караме нататък.
Аз имам един голям недостатък, че не съм учил никакво програмиране на времето, когато трябваше и макар, да звучи нескромно - едно преимущество - много силно развита логика.
В петък си купих един празен чип и един китайски програматор, разпоих един дисплей от волтметър, който имах подръка и днес го накарах да светне и да изпише, каквото му написах...Тогава осъзнах, какво необятно море от възможности се отварят в практиката. Както казах, занимавам се в точно определена сфера.
Искам да усвоя принципните неща и да се науча да програмирам онова, което ми трябва, а не просто да програмирам неща заради самото можене. Дано не бъда разбран погрешно, но мигащи диоди и бягащи светлини никак не са ми в сферата на интереса, а за съжаление или аз незнам, къде да търся или интернета е пълен само с такива. Затова се обръщам за помощ към хората, които знаят. Ако трябва да ползвам и аз метафора, да се науча да ползвам топла вода, а не да я откривам.

Р.S. Колкото до фурната, колегата е абсолютно прав, но има хора и хора, както е и важно да знаеш, какво точно искаш. С дължимото уважение ще трябва да коментирам отговора му, но аз и сега знам, че трябва за избера и точно за този избор питам...


Вто Окт 27, 2015 2:03 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Фев 07, 2012 11:22 pm
Мнения: 3084
Мнение Re: Въпрос на съвсем начинаещ
Възможно е да си попаднал не където трябва :D .
XC8 e компилатор на фирмата Микрочип за езика С. Хубавото е ,че е безплатен,
и във форумите на фирмата има кой да ти помогне, а и тука.
Лошата новина е , че ученето на език започва от лампички и бутони. По-лошата е ,че обработката на един бутон не е като обработката на много бутони.
Най-лошата е ,че се изисква много четене - за всеки чип си има особености.
Втората добра новина е, че след първия чип нещата стават по-лесни.
За да ти напиша редовете, които искаш , трябва:
- да прочета кои регистри трябва да заредя с нещо, та пинът да стане вход.
- специално на малките пикове има специфични инструкции от сорта TRIS и трябва да намеря как се пишат за конкретната фамилия в този компилатор.
По примера ,който си ползвал - изглежда да е TRISB = 0x01
- трябва да намеря как в този компилатор се пише

if (RB0==0)
{ Lcd_Set_Cursor(2,1);
Lcd_Write_String("Grounded PB0");
__delay_ms(2000);}
else

{ Lcd_Set_Cursor(2,1);
Lcd_Write_String("NoGround PB0");
__delay_ms(2000);} ;

- Ако искам за тоя пин да е включен подпиращ резистор към +5В - трябва
да установя някой друг регистър.
- Ако искам да е аналогов вход - трябва да запиша още няколко регистъра , свързани с аналоговите функции на крачетата.
- Ако ще е аналогов вход- трябва да разуча АЦП ....

Има и други подходи - ардуино, готови модули , среди за "графично" програмиране, PLC ,ладер диаграми.


Вто Окт 27, 2015 8:20 am
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пон Окт 26, 2015 10:14 pm
Мнения: 46
Мнение Re: Въпрос на съвсем начинаещ
Много благодаря за отговора. Точно такъв тип рамо ми е необходимо, аз оттам нататък ще го разцъкам до основи, разбира се докато не излезе следващото въпросче. Например, как програмно се решава въпроса, ако на входове В0 и В1 едновремено се появят сигнали, кой има приоритет и как ще стане изписването на дисплея. Въпроса ми е принципен за синтаксис, точно както е отговорено, а не за конкретния чип.

Наясно съм, че едва ли ще попадна на някой, който ляга и става с моите проблеми...Затова уж избрах този чип PIC16F887, защото повечето книги на които попаднах
бяха базирани на предшественика му 16F877. Очевидно е универсален т.е. много програмируеми входове и изходи, ADC, вграден осцилатор, таймери, компаратори и т.н. и се надявах да попадна на някой, който е запознат с него. Със сигурност има и по опростени варианти, да не скача човек в дълбокото, ама ако ще е да е...
Благодаря още веднъж.


Вто Окт 27, 2015 1:07 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Фев 07, 2012 11:22 pm
Мнения: 3084
Мнение Re: Въпрос на съвсем начинаещ
За следващия си въпрос - отвори нова тема в раздела Академия, ако може в заглавието да
си напишеш номера на процесора, ако е толкова важно.
Сега погледнах ,че имам на масата 16ф882 . Ще го ползвам за нещо си. Само че няма да запомня нищо съществено за архитектурата му . Това е така, защото - имам си план в главата, избрал съм процесора според задачите пред мене. Ще чета , пиша, пробвам и забравям. При тебе е 1-ви , та ще го помниш.
По въпроса за приоритетите - всичко става в главата ти, процесорът е само инструмент.
Има няколко важни неща, които начинаещият обикновено игнорира, ще си позволя да ги напиша:
- процесорът/контролерът може да прави четене на данни, запис на данни и да прекъсва.
(Почти всички (но не е задължително) могат да манипулират данните - ротация, аритметични операции и тем подобни) .
- обработката на прекъсване трябва да е възможно най-кратка, в нея се прави само необходимото и нищо друго.
- прекъсване по таймер , обработка на прекъсването и сигнализиране към главната програма трябва да е част от "натискане на бутон и светване на лампичка" - за всеки начинаещ.


Вто Окт 27, 2015 1:48 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пет Фев 04, 2005 9:59 pm
Мнения: 6019
Местоположение: София
Мнение Re: Въпрос на съвсем начинаещ
dimitrov2000 трябваше първо да попиташ тук и после да си купуваш контролери.
Правиш си ебей акаунт и си купуваш едно ардуино и каквото ти хване окото от това https://www.google.com/search?q=arduino ... 20&bih=979
след което почваш да търсиш с гугъл това https://www.google.com/search?es_sm=93& ... 8mmdlWLU8A
и почваш да експериментираш.

P.S. Никога не е късно да научиш нов език, не зависимо дали е чужд език или език за програмиране.

_________________
Warriors of the Night, ASSEMBLER!!!


Вто Окт 27, 2015 3:26 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Фев 10, 2005 3:25 pm
Мнения: 5677
Местоположение: София
Мнение Re: Въпрос на съвсем начинаещ
dimitrov2000, не слушай ike. :) Хващай CCS C-то.


Вто Окт 27, 2015 4:31 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пон Окт 26, 2015 10:14 pm
Мнения: 46
Мнение Re: Въпрос на съвсем начинаещ
ike написа:
dimitrov2000 трябваше първо да попиташ тук и после да си купуваш контролери.
Правиш си ебей акаунт и си купуваш едно ардуино и каквото ти хване окото от това https://www.google.com/search?q=arduino ... 20&bih=979
след което почваш да търсиш с гугъл това https://www.google.com/search?es_sm=93& ... 8mmdlWLU8A
и почваш да експериментираш.

P.S. Никога не е късно да научиш нов език, не зависимо дали е чужд език или език за програмиране.


Това ардуино май много те е впечатлило, че гледам го препоръчваш под път и над път, ама нейсе...
Мисля че преди на пишем, трябва да четем...т.е. имам предвид да си четем постовете, иначе става анархия:

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


Вто Окт 27, 2015 11:00 pm
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Съб Ное 29, 2014 10:11 am
Мнения: 774
Мнение Re: Въпрос на съвсем начинаещ
Според мен хвани първо езика C , изтегли си някакъв компилатор . Например Codebloks като проиграваш готови програми или отделни задачи . След като схванеш основните неща тогава чак почвай микроконтролерите .
Просто аз си мисля че се опитваш да почнеш нещата отзад напред .

ПС: Радвай се че не те хвърлиха да учиш асемблер . :)
И аз съм за XC8 , не затова че е по лесно с него, а затова че не те ограничава в нищо и няма да хванеш вредните навици на ардуино програмиста. :)


Вто Окт 27, 2015 11:50 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Вто Мар 31, 2009 10:25 am
Мнения: 1391
Мнение Re: Въпрос на съвсем начинаещ
Колега, виж тази обява:

Комет Електроникс/Microchip - СЕМИНАР 10 Ноември


Сря Окт 28, 2015 10:49 am
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пон Окт 26, 2015 10:14 pm
Мнения: 46
Мнение Re: Въпрос на съвсем начинаещ
Благодаря колега, но като гледам топиците, май още съм далеч от тези нива...


Сря Окт 28, 2015 11:56 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пет Фев 04, 2005 9:59 pm
Мнения: 6019
Местоположение: София
Мнение Re: Въпрос на съвсем начинаещ
ilkor Там ще си загуби времето, ще се чуства като кобра, на събрание на мангусти. Разбирам, че искаш да събереш повече хора, за да не ви останат от кебапчетата, но само ще заема място в залата и ще си загуби деня.
dimitrov2000 дори не може да задава правилните въпроси. Той ако можеше, щеше да ги задъде на гугъл.

Цитат:
моля някой знаещ да добави два реда за да хвана логиката на нещата,


Код:
#include <LiquidCrystal.h>

int tempPin = 0;
int lightPin = 1;

//                BS  E  D4 D5  D6 D7
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);

void setup()
{
  lcd.begin(16, 2);
}

void loop()
{
  // Display Temperature in C
  int tempReading = analogRead(tempPin);
  float tempVolts = tempReading * 5.0 / 1024.0;
  float tempC = (tempVolts - 0.5) * 100.0;
  float tempF = tempC * 9.0 / 5.0 + 32.0;
  //         ----------------
  lcd.print("Temp         F  ");
  lcd.setCursor(6, 0);
  lcd.print(tempF);
 
  // Display Light on second row
  int lightReading = analogRead(lightPin);
  lcd.setCursor(0, 1);
  //         ----------------
  lcd.print("Light           "); 
  lcd.setCursor(6, 1);
  lcd.print(lightReading);
  delay(500);
}

_________________
Warriors of the Night, ASSEMBLER!!!


Сря Окт 28, 2015 12:11 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пон Окт 26, 2015 10:14 pm
Мнения: 46
Мнение Re: Въпрос на съвсем начинаещ
ike написа:
ilkor Там ще си загуби времето, ще се чуства като кобра, на събрание на мангусти. Разбирам, че искаш да събереш повече хора, за да не ви останат от кебапчетата, но само ще заема място в залата и ще си загуби деня.
dimitrov2000 дори не може да задава правилните въпроси. Той ако можеше, щеше да ги задъде на гугъл.

Цитат:
моля някой знаещ да добави два реда за да хвана логиката на нещата,


Код:
#include <LiquidCrystal.h>

int tempPin = 0;
int lightPin = 1;

//                BS  E  D4 D5  D6 D7
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);

void setup()
{
  lcd.begin(16, 2);
}

void loop()
{
  // Display Temperature in C
  int tempReading = analogRead(tempPin);
  float tempVolts = tempReading * 5.0 / 1024.0;
  float tempC = (tempVolts - 0.5) * 100.0;
  float tempF = tempC * 9.0 / 5.0 + 32.0;
  //         ----------------
  lcd.print("Temp         F  ");
  lcd.setCursor(6, 0);
  lcd.print(tempF);
 
  // Display Light on second row
  int lightReading = analogRead(lightPin);
  lcd.setCursor(0, 1);
  //         ----------------
  lcd.print("Light           "); 
  lcd.setCursor(6, 1);
  lcd.print(lightReading);
  delay(500);
}



Благодаря за отговора, ще го разуча внимателно и ще видя, какво мога да изтръгна от него...
Междувременно благодарение на колегата, който спомена по горе за графични среди за програмиране, попаднах на Flowcode 5 и мисля, че това е точно за мен на този етап. На път съм да го усвоя, но ударих греда...та пак се налага да губя на някой времето. Проектчето е елементарно за тест на диод и там е работата, че на собствения му симулатор работи, работи без грешка и на Протеус, а в реалния живот не ще. Къде може да е проблема. Компилирам го с Flowcode, после хекса го наливам с MPLAB IPE. Никой не реве за грешка. Къде може да е проблема. Прилагам работещ код за тест на LCD и въпросния неработещ. Пика е все 16F887. Моля за помощ.


Прикачени файлове:
LCD Test OK.txt [2.29 KiB]
303 пъти
LED Test NOT OK.txt [4.38 KiB]
310 пъти


Последна промяна dimitrov2000 на Сря Окт 28, 2015 8:27 pm, променена общо 1 път

Сря Окт 28, 2015 7:11 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 20 мнения ]  Отиди на страница 1, 2  Следваща

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 2 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни