200 сообщений в этой теме

brown    0

Все вроде бы правильно, но! вторую команду lcdout я бы переставил (см.

ниже), так как на ее исполнение требуется на много больше чем 100мкС.

это ошибка!? Проверь Протеусом-сообщи результат! Сам до него ни как не

доберусь;(

Может проще использовать TMR0 с предделителем?

DEFINE LCD_DREG PORTC 'LCD data port B

DEFINE LCD_DBIT 4 'LCD data starting bit 0 or 4

DEFINE LCD_RSREG PORTC 'LCD register select port D.1

DEFINE LCD_RSBIT 1 'LCD register select bit 1

DEFINE LCD_EREG PORTC 'LCD enable port D.3

DEFINE LCD_EBIT 3 'LCD enable bit

DEFINE LCD_BITS 4 'LCD bus size 4 or 8

DEFINE LCD_LINES 2

DEFINE LCD_COMMANDUS 2000 'Command delay time in us

DEFINE LCD_DATAUS 50 'Data delay time in us

DEFINE OSC 20

od var byte

w1 var word

od100 var byte

od1km var word

F var word

st var bit

i var word

@ device WDT_OFF

OPTION_REG = $C7

trisB=255

LCDOUT $FE, 1,"Privet Andrey",#portb

pause 500

st=1

F=0

w1=1

intcon=$C0

T1CON=0

On Interrupt Goto signal

m:

if st=1 then

if PortB.7=1 and w1=1 then start

if PortB.7=0 and w1=0 then stoping

endif

goto m

start:

TMR1H=254

TMR1L=12

T1CON=1

PIE1=1

w1=0

high portc.0

goto ex

stoping:

PIE1=0

T1CON=0

od1km=F*3

LCDOUT $FE, 2, #od1km, " ", #F, " "

w1=1

F=0

low portc.0

ex:

st=1

goto m

Disable

signal:

f=f+1

TMR1H=254

TMR1L=12

PIR1=0

st=1

Resume

Enable

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Быстрый заказ печатных плат

Полный цикл производства PCB по низким ценам!

  • x
    мм
Заказать Получить купон на $5.00
Yrok    0

О!!

Спасибо за ответ!!!

Я уже подумал ветка заброшена--вот и несмотрел.

Попробовал переставленный вариант--тоже неправильные показания!!!

При входных импульсах 10мс--показывает 82(отрезка)

при 12мс--99

что делать незнаю???!!!!!

бился и так и эдак результат нулевой.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Nuken    0

В РВР есть PULSIN для измерения длительности импульса. Если используется кварц на 20 МГц, то возвращается результат с инкрементом 2 мкс (например, если результат 200, то длина импульса 200х2 мкс).

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Yrok    0

Дело в том что при исполнении команды Pulsin--ничего параллельно делать нельзя--микроконтроллер тупо будет ждать конца импульса считая отрезки по 2 мксек.

А если длина импульса 1-50 мсек--а при этом надо еще следить за другим входом и регистрировать на нем количество приходящих импульсов--тогда команда Pulsin неподходит.

Поэтому пришлось написать свою программу подсчета длительности импульса--и теперь надо разобраться почему она неправильно считает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Nuken    0

1)

m:

if st=1 then

if PortB.7=1 and w1=1 then start

if PortB.7=0 and w1=0 then stoping

endif

goto m

Вот тут нету ошибки? Один ENDIF и 3 IF. На сколько помню, каждому IF должен бвть свой ENDIF.

2) В самих доках по PBP написано, что нужно использовать GOTO Label как можно меньше и лучше юзать GOSUB ... RETURN. Это тоже может вызывать глюки. Допишите в каждую подрограмму st=1 и вызывайте из подрограммы m start и stoping через GOSUB ... RETURN.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Yrok    0
m:

if st=1 then

if PortB.7=1 and w1=1 then start

if PortB.7=0 and w1=0 then stoping

endif

goto m

ошибки нет--если после if исполняется один оператор то endif ставить ненадо!!!

поменял на gosub и return

теперь при входных импульсах 10мс--показывает 88-89 отрезков(результат бегает от 88-89)

т.е. регистрирует входной импульс длительностью 8.8-8.9 мсек---короче теряется 1.1-1.2 мсек

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
narzan    0
m:

if st=1 then

if PortB.7=1 and w1=1 then start

if PortB.7=0 and w1=0 then stoping

endif

goto m

ошибки нет--если после if исполняется один оператор то endif ставить ненадо!!!

поменял на gosub и return

теперь при входных импульсах 10мс--показывает 88-89 отрезков(результат бегает от 88-89)

т.е. регистрирует входной импульс длительностью 8.8-8.9 мсек---короче теряется 1.1-1.2 мсек

Комментарий: после конструкции If ... Then лучше всегда ставить endif, т.к. возможны недокументированные глюки, что я неоднократно замечал, читая получившийся после компиляции файл ассемблера.

Все временные интервалы лучше задавать через прерывание по таймеру и по возможности прогонять на симуляторе.

В Вашем случае необходимо использовать АППАРАТНОЕ прерывание, а именно конструкцию DEFINE INTHAND метка, и далее на ассемблере сохранение регистров при входе в прерывание и восстановление при выходе из прерывания. Читайте мануал, там есть пример, как это сделать.

Изменено пользователем narzan

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Привет программисты! Помогите начинающему Делаю автомат управления освещением аквариума на PIC16F874 и LCD WH0802. Пишу на PicBasic. Половину программы написал, а дальше что-то не могу. Короче как автомат должен работать: Включаю, на дисплее надпись "введите время", выставляю, потом надпись "установите интервал" ( например включение света от 8.00 до 21.00 ), после того как все настроил на дисплее идет время и в зависимости от времени включается/выключается свет. Программу часов я написал, всякие надписи типа "введите время" я смогу сделать, настроить интервал включения тоже сам смогу, но я не знаю как выставлять время. Алгоритм проги, которую я написал:

объявил переменные:

i var byte

w var byte

a var byte

i - часы

w - минуты

a - секунды

теперь сама программа

main:

for i = 0 to 23

for w = 0 to 59

for a = 0 to 59

LCDOUT $FE, 1, #i, ":", #w, ":", #a

pause 1000

next a

next w

next i

goto main

прога рабочая, проверено.

Я пробовал выставлять время так:

if portc.0 = 0 then M = M (переменная) + 1

if portc.1 = 0 then w = m

т.е. если кнопка, подключенная к портС.0 нажата например 5 раз, то

переменная М = 5, если нажата вторая кнопка, то минуты = 5, но так не катит. Подскажите, как можно настраивать время

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
evgenb    0

Данила

Для развития проекта, его лучше выложить со схемой в протеусе.

И потихоньку совершенствовать. по ходу учится.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Dm17    0

Опишите плз. полный алгоритм действий для 1-wire!!!

Для ds1820 уже разобрался (содрал пример с сайта), но вот как считать напругу с ds2450 не могу понять.

Если не сложно набросайте пример работы с ds2450 под picbasic pro

PLZ

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
pacan40    0

тоже начал мучать picbasic, тут возник вопрос: как подцепить и написать прогу под управление валкодером в пикбесике, конкретно под tda7313?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
sot    0

Народ как в Pic Basic вывести на LSD байт в шестнадцатиричном виде?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
capitan DIC    0

Люди! не могу разобраться с командой : FOR....NEXT. Кто нибудь для примера, дайте простенькую прогу с этой командой.

И желательно с пояснением!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
oneeyeman    0

подскажите пожалуйста в чем проблема?

элементарная програмка (включения и выключения светодиода)

loop:

high 10

pause 1000

low 10

pause 1000

goto loop

компилируется и на пик симуляторе запускается только на половину...

светодиод загорается но тухнуть не хочет...

пытаюсь написать ее же и скомпилировать в прилогающемся к пик симулятору бейсик компиляторе

так пишет что в строчке "pause 1000" ошибка...

в чем дело?

помогите разобраться пожалуйста?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
wowa    4

Уведите какой именно BASIC компилятор используете...

А есть там вообще подпрограма pause? и какой параметр берёт на вход? Может быть это в секундах? Тогда всё правильно у вас работает :) Потухнет через через 16 с копейкой секунд :) Какую именно ошибку выдайт в этой строке? Я на бейсике не писал ничего с времён школы.. лет 20 уже...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Lev@    1
тоже начал мучать picbasic, тут возник вопрос: как подцепить и написать прогу под управление валкодером в пикбесике, конкретно под tda7313?

Тоже сижу мучаю прогу под ЭНКОДЕР (2 шт, подключены к RB4:7)- PicBasicPRO

На даный момент имею:

'****************************************************************
'*  Name	: Обработчик сигналов энкодера					  *
'*  Author  : Lev@											  *
'*  Notice  : Copyright © 2009 Lev@						   *
'*		  : All Rights Reserved							   *
'*  Date	: 20.10.2009										*
'*  Version : 1.0											   *
'*  Notes   :												   *
'*		  :												   *
'****************************************************************
REGIN VAR BYTE
FLAGIN VAR BYTE

TRISB = %11110000	   	' Направление порта В			   
OPTION_REG = %10000000	  ' Подтягив. резисторы
ON INTERRUPT GOTO INT   	' При прерывании переход к подпрограмме
INTCON = %10001000		  ' Разрешение глоб. прерываний, прерывания по изм. RB7:RB4   
REGIN=0			  ' Очистка всех ячеек регистров
FLAGIN=0						  

' Заносим состояние входов в память
IF PORTB.4=1  THEN 
REGIN.0=1	
ELSE 
REGIN.0=0
ENDIF
IF PORTB.5=1  THEN 
REGIN.1=1	
ELSE 
REGIN.1=0
ENDIF
IF PORTB.6=1  THEN 
REGIN.2=1	
ELSE 
REGIN.2=0
ENDIF
IF PORTB.7=1  THEN 
REGIN.3=1	
ELSE 
REGIN.3=0
ENDIF			   

Main:					   ' < Основная программа
GOTO Main			   	' Зацикливание осн. программы >

DISABLE					 ' < Запрет всех прерываний
INT:					' Метка подпрограммы - обработчика прерываний
IF INTCON.0 = 0 THEN ET ' Проверка флага прерываний - было ли прерывание по изм. RB7:RB4

IF PORTB.4 <> REGIN.0 THEN 
 FLAGIN.0=1			  ' Установить флаг прерывания от соотв. входа RB4
   IF FLAGIN.1=1 THEN	 ' Проверка наличия изменения сигнала на парном выводе
	 PORTB.0=1			' Если да - импульс
	 PAUSE 100			' Формируем задежку импульса 0,1с
	 PORTB.0=0			' Конец импульса
	 FLAGIN.0=0			' Обнуляем флаг прерывания от соотв. входа RB4
	 FLAGIN.1=0			' Обнуляем флаг прерывания от соотв. входа RB5
   ENDIF
ENDIF
 IF PORTB.5 <> REGIN.1 THEN 
 FLAGIN.1=1			  ' Установить флаг прерывания от соотв. входа RB5
   IF FLAGIN.0=1 THEN	 ' Проверка наличия изменения сигнала на парном выводе
	 PORTB.1=1			' Если да - импульс
	 PAUSE 100			' Формируем задежку импульса 0,1с
	 PORTB.1=0			' Конец импульса
	 FLAGIN.0=0		   ' Обнуляем флаг прерывания от соотв. входа RB4
	 FLAGIN.1=0		   ' Обнуляем флаг прерывания от соотв. входа RB5
   ENDIF
ENDIF
IF PORTB.6 <> REGIN.2 THEN 
 FLAGIN.2=1			  ' Установить флаг прерывания от соотв. входа RB6
   IF FLAGIN.3=1 THEN	 ' Проверка наличия изменения сигнала на парном выводе
	 PORTB.2=1			' Если да - импульс
	 PAUSE 100			' Формируем задежку импульса 0,1с
	 PORTB.2=0			' Конец импульса
	 FLAGIN.2=0			' Обнуляем флаг прерывания от соотв. входа RB6
	 FLAGIN.3=0			' Обнуляем флаг прерывания от соотв. входа RB7
   ENDIF
ENDIF
IF PORTB.7 <> REGIN.3 THEN 
 FLAGIN.3=1			  ' Установить флаг прерывания от соотв. входа RB7
   IF FLAGIN.2=1 THEN	 ' Проверка наличия изменения сигнала на парном выводе
	 PORTB.3=1			' Если да - импульс
	 PAUSE 100			' Формируем задежку импульса 0,1с
	 PORTB.3=0			' Конец импульса
	 FLAGIN.2=0			' Обнуляем флаг прерывания от соотв. входа RB6
	 FLAGIN.3=0			' Обнуляем флаг прерывания от соотв. входа RB7
   ENDIF
ENDIF
ET:					' Подготовка к выходу из обработчий
INTCON.0=0		 ' Сброс флага прерываний по изм. RB7:RB4
RESUME
ENABLE					  ' Разрешение всех прерываний >
END

Это еще не конец. Еще допишу правильный выход из обработки. Потом скорее всего в асемблере откоректирую... :)

подскажите пожалуйста в чем проблема?

элементарная програмка (включения и выключения светодиода)

loop:

high 10

pause 1000

low 10

pause 1000

goto loop

компилируется и на пик симуляторе запускается только на половину...

светодиод загорается но тухнуть не хочет...

пытаюсь написать ее же и скомпилировать в прилогающемся к пик симулятору бейсик компиляторе

так пишет что в строчке "pause 1000" ошибка...

в чем дело?

помогите разобраться пожалуйста?

Если используешь Basic Compiler встроенный в PIC Simulator IDE - то там нету такой процедуры - юзай хелп к нему. А можешь как я - учить PicBasicPRO к нему есть поболее документации. (Кста Ты ею и пользуешься судя по всему, токо Basic Compiler это совсем другой язык)

Качай вот сдесь компилятор сцылка

Изменено пользователем wowa

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Lev@    1

Вопрос:

Допустим есть B VAR BYTE как сделать побитную выборку? т.е. х=В0, В1, ... В7

Изменено пользователем Lev@

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Alex    484

Не знаю синтаксиса языка PicBasic, но побитную выборку можно сделать с помощью лог. операций AND и OR

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Lev@    1
Не знаю синтаксиса языка PicBasic, но побитную выборку можно сделать с помощью лог. операций AND и OR

сам только учусь.

по логике вещей должно быть что-то похожее на

x VAR bit
B VAR byte

For i=0 to 7
x=B(i)
Next i

Но почему-то не хочет так работать...

Изменено пользователем Lev@

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А с чего это оно будет работать ? У вас В это что массив какой-то ? :)

Не знаю как в барсике, но в СИ если нужно работать с числом на уровне битов можно использовать битовое поле.

Изменено пользователем a_sergeevich

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Lev@    1

И как это сделать?

Правилами запрещено цитировать предедущий пост. Пока вам предупреждение. Wowa.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Для Си кратко:

Битовые поля

Внутри структурных типов могут быть организованы, так называемые, битовые поля. Такое поле начинается с младшего бита того слова, в котором оно будет размещаться. Битовые поля размещаются внутри 8-ми битных слов. Если поле не удается разместить в текущем байте структуры, то размещение продолжается в следующем байте. Битовые поля никогда не пересекают границу между 8-ми битовыми областями, выделенными для данной структуры. Например:

struct {

unsigned hi : 1;

unsigned dummy : 6;

unsigned lo : 1;

} foo @ 0x10;

В данном случае структура будет занимать один байт по адресу 0х10. При этом поле hi будет соответствовать нулевому биту, а lo – 7-му биту регистра по адресу 0х10. Младший бит поля dummy будет располагаться в первом, а старший – в 6-м битах регистра 0х10. Если структура описана, как показано выше, то она будет размещена по абсолютному адресу, и память под ее размещение выделяться не будет.

Если необходимо определить битовое поле, которое содержит неиспользуемые области, то можно указать безымянные поля:

struct {

unsigned hi : 1;

unsigned : 6;

unsigned lo : 1;

} foo @ 0x10;

Как это сделать на РВР я не знаю. Я честно сразу, когда заинтересовался пиками, тоже ломанул на РВР, но потом понял его ущербность и перешёл на Си и компиль-среда разработки микроСи, но сейчас учусь на HI-TEC там библиотек готовых меньше, что сподвигает более углубленному изучению :) и об этом решении ни грамма не жалею. Иногда то, что на первый взгляд выглядит просто потом выходит боком, да и консультацию по Си дадут 100% на форуме быстрее чем на барсике, а по нему могут вообще не дать, но это ИМХО.

Ещё Вам тут правильно подсказали, что чтение отдельных битов можно осуществлять с помощью побитовых операций в Си это & (И), |(ИЛИ) не путать с логическими операциями !!!.

Т.е смысл в том, что с помощью операции & и маски мы ненужные биты выключаем, а нужный считываем, например:

n = 00110101;

допустим нам надо узнать значение нулевого бита, тогда применяя маску 00000001

с = n & 00000001; мы передадим в "с" значение нулевого бита т.е 1, затем уже делаем с ним что нам надо.

00110101

&&&&&&&

00000001

---------

00000001

Чтобы включить биты (т.е, которые установлены в ноль) используем побитовую операцию ИЛИ (|)

n = 00110101;

c = 00000001;

c = c | n;

в результате "с" равно 00110101 т.е с == n

00000001

|

00110101

---------

00110101

Надеюсь объяснил понятно, уж аналог Си-шных побитных операций в барсике найдёте сами :)

Удачи и все же совет переходите на Си.

Изменено пользователем wowa

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Lev@    1

Тогда это еще проще сделать на ASM - с помощью сравнения с "1" или "0" BTFSC и BTFSS ! Будет самый простой и КОРОТКИЙ код! ;)

Изменено пользователем Lev@

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В микроСи вообще доступ к битам осуществляется просто и наглядно:

char D;

bit0 = D.F0;

bit1 = D.F1 ну и т.д.

Честно асм вообще не знаю не лежит у меня к нему душа, как то на Си для себя мне проще и быстрее да и замарок меньше, хотя если Вы знаете асм накой Вам вообще этот барсик сдался ? :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Похожие публикации

    • Автор: karomag
      Добрый день.
      Экспериментирую с подключение 7-сегментного индикатора к мк stm32. Индикатор с общим катодом. Соответственно для вывода цифры необходимо на анод каждого сегмента подать 1, а на общий катод 0. И тут я не могу понять какие токи будут через порты. Теоретически, пины МК подключенные через резистор 300 Ом к аноду (напряжение МК 3.3 В) то ток будет 4 мА, тогда на общем катоде должно быть 7 * 4 = 28 мА (цифра 8, т.е. горят все сегменты). Т.е. это небольшое, но превышение макс тока на ногу 20 мА. И надо общий вывод подключать через транзисторный ключ.
      Взял мультиметр. Результаты замера: ток каждого сегмента ~2.5 мА, ток общего катода 5 мА. Вот тут я подумал о школе Хогвардс))) Как все таки рассчитывается все таки ток на общем выводе? 
    • Автор: art_budka
      Ищу подрядчика для разработки проекта робота-рисовальщика. Есть бюджет, ТЗ. 
      Устройство представляет собой манипулятор передвигающий головку в плоскости XY в пределах жесткой рамы на которой установлены двигатели и направляющие перемещения. Головка представляет собой блок, отвечающий за передвижение закрепленного в фиксаторе объекта-пера по оси Z на расстояние до 20 мм. Фиксатор на элементе подъёма головки должен обеспечить жесткое закрепление предметов массой 10 - 80 грамм - кистей, шариковых ручек, карандашей и маркеров диаметром от 5 до 20 мм.
      Решение необходимо для обеспечения точных, многократно повторяющихся перемещений “пера” над плоской поверхностью. Для формирования движений в устройстве должна быть реализована электромеханическая схема, подключенная посредством USB-интерфейса к персональному компьютеру для отправки команд на манипулятор и получения обратной связи от контроллера манипулятора. 
      ТЗ, смета и бюджет через art_budka@rambler.ru 
    • Автор: green_whale
      Доброго времени суток.
      Собственно, сразу к делу. Необходимо измерить вч напряжение (частота порядка 20кГц, максимальная амплитуда 75мВ) с помощью микроконтроллера (скорее всего будет использоваться Arduino).
      Форма входного сигнала - пила (возрастает от минимального значения до максимального). Сигнал однополярный.
      Измерить нужно именно максимальное значение входящего сигнала. Измерение должно быть весьма точным (желательно, чтобы погрешность не превышала 1-2%).
      Есть пару идей :
      1. Сгладить сигнал, используя пиковый детектор (сможет ли сигнал такой частоты и формы зарядить конденсатор?).
      2. Использовать цап для генерации постепенно снижающегося напряжения и аналоговый компаратор.

      Надеюсь, кто-нибудь уже решал подобную проблему и сможет помочь советом или схемой.
    • Гость мистер_чувак
      Автор: Гость мистер_чувак
      Здравствуйте. Нашёл свои старые китайские портативные колонки, которые давно уже разобрал и потерял некоторые провода. Помогите разобраться, что к чему соединять, чтобы работало.
      фотка1
      фотка2
      фотка3
      фотка4
      фотка5
      фотка6
      фотка7
    • Автор: butyavk
      Компания "Диаконт" приглашает на собеседование по вакансии инженер-программист микроконтроллеров.
      Мы производим и поставляем современные приборы управления электроприводами для различных отраслей отечественной промышленности.
      Пополняем нашу команду программистов (готовы принять 2-3 кандидатов с различным опытом работы)!

      Основные обязанности:
      Разработка программного обеспечения для блоков управления приводами и др. вычислительных систем.
      Программирование на C++ микроконтроллеров фирмы Texas Instruments и НИИЭТ на базе ядра ARM Cortex-M4.
      Поддержка и доработка существующего программного обеспечения.
      Участие в научно-исследовательских и опытно-конструкторских работах.
      Участие во внедрении систем на объектах (редкие командировки).

      Требования к кандидатам:
      Хорошее знание схемотехники;
      Знание методов разработки и проектирования ПО для микроконтроллеров и опыт работы с их периферией;
      Знание основ управления электроприводами и ТАУ;
      Знание языков программирования высокого уровня (C++, C);
      Знание современных методов разработки ПО (ООП, ...);
      Знание английского языка (чтение технической документации);
      Приветствуется знание Python, Matlab/Octave;
      Дополнительным плюсом будет опыт автоматизированного тестирования встроенного ПО.

      Условия:
      Оплата полностью белая (на руки в зависимости от знаний и опыта от 50 000 руб до 100000 руб). Но, готовы обсуждать!;
      Карьерный и профессиональный рост;
      Предприятие с комфортными условиями труда на севере города;
      ДМС;
      График работы понедельник - пятница 9:00-17:40;
      Плавающее начало работы с 8:00-10:00;
      Льготное питание в столовой на территории предприятия;...

      Ключевые навыки
      Программирование микроконтороллеров
      C/C++
      Управление электродвигателями

      Адрес
      Санкт-Петербург, ул. Учительская 2, м. Гражданский проспект

      Тип занятости
      Полная занятость, полный день

      Резюме лучше отправлять на rykov@diakont.com