Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Глюк в программе или в компилляторе?


Глюк в программе или в компилляторе?

Сообщений 1 страница 15 из 15

1

Здравия всем!
проблема такая:
написал следующий код:

ТУТ КОД

' MCU config
$regfile = "attiny13.dat"
$crystal = 9600000
$hwstack = 8
$swstack = 16
$framesize = 16
$prog &HFF , &H7A , &HFF , &H00
' Pin config
Config Portb.0 = Output
Config Portb.1 = Output
Config Portb.3 = Output
' Var declare
Dim Rezhim As Byte
Dim Vremya As Integer
' Sub declare
Declare Sub 0
Declare Sub 1
Declare Sub 2
Declare Sub 3
Declare Sub 4
Declare Sub 5
Declare Sub 6
Declare Sub 7
Declare Sub 8
' General source
Do
Rezhim = Rnd(7)
Vremya = Rnd(1000)
If Rezhim = 0 Then Gosub 0
If Rezhim = 1 Then Gosub 1
If Rezhim = 2 Then Gosub 2
If Rezhim = 3 Then Gosub 3
If Rezhim = 4 Then Gosub 4
If Rezhim = 5 Then Gosub 5
If Rezhim = 6 Then Gosub 6
If Rezhim = 7 Then Gosub 7
Waitms Vremya
Loop
End
Sub 0
Portb.0 = 0
Portb.3 = 0
Portb.1 = 0
End Sub
Sub 1
Portb.0 = 0
Portb.3 = 0
Portb.1 = 1
End Sub
Sub 2
Portb.0 = 0
Portb.3 = 1
Portb.1 = 0
End Sub
Sub 3
Portb.0 = 0
Portb.3 = 1
Portb.1 = 1
End Sub
Sub 4
Portb.0 = 1
Portb.3 = 0
Portb.1 = 0
End Sub
Sub 5
Portb.0 = 1
Portb.3 = 0
Portb.1 = 1
End Sub
Sub 6
Portb.0 = 1
Portb.3 = 1
Portb.1 = 0
End Sub
Sub 7
Portb.0 = 1
Portb.3 = 1
Portb.1 = 1
End Sub

при запуске в железе, оказалось, что тот порт, который в субах указан последним, всегда включен, в независимости от того, что там прописано Portb.1 = 1 или Portb.1 = 0.
пробовал менять, прописывал в субе в последней строчке и ПОРТБ.1 и ПОРТБ.2 и ПОРТБ.3... всегда, тот порт, что указан в последней строчке суба, там косяк....

проблему решил двумя способами:
1- дописать в каждую субу последнюю строчку два раза например:
Sub 7
Portb.0 = 1
Portb.3 = 1
Portb.1 = 1
Portb.1 = 1
End Sub
- долго, дорого (много лишнего кода), не кошерно... :mad:
2- дописать в конце , после всех суб, еще одну :
Sub 8
End sub
- быстро, минимум кода, кошерно... :jumping:

С тем, что я нашел как устранить (Танец с бубном) эту проблему то ладно... но мн интересно, так только у меня или у всех?  :dontknow:

и еще.. использую контроллер attiny13a, но когда выбираю в конфиге его, то при прошивке он не моет быть определен (программатор USB ASP с ebay.com), а если ставлю attiny13 (как в коде), то все окейно шьется.  %-)

Отредактировано UN8JAB (2012-11-17 07:50:12)

0

2

Mrshilov написал(а):

Так надо и использовать $regfile = "attiny13а.dat"

когда использую в программе $regfile = "attiny13а.dat", тогда контроллер не определяется и прошить не получается.
http://s3.uploads.ru/t/MNyn9.jpg
когда выставляю $regfile = "attiny13.dat" без индекса а, тогда определяется контроллер нормально и прошивается и работает все.
http://s2.uploads.ru/t/8eZxC.jpg
версия баскома 2.0.7.1

Отредактировано UN8JAB (2012-11-17 17:41:11)

0

3

Mrshilov написал(а):

Получается, что контроллер с перебитым названием  . У меня Bascom 2.0.7.5 с USBAsp Мегу8 от Меги8А отличает правильно в обе стороны.

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

щас попробовал определить контроллеры, результаты такие:
ATtini13a - глюк описан выше.
ATmega8 - ATmega8
ATmega8a - ATmega8a
ATmega16 - ATmega16
ATmega16a - ATmega16a
ATmega168 - ATmega168

Отредактировано UN8JAB (2012-11-17 21:13:56)

0

4

у меня тоже такой же программатор не шьет тини13а - приходится тини13 ставить - явно ошибка в ini файлах компилятора - надо бы Марку сообщить, да не отвечает он по пол года... :( у них там новый мега проект...

0

5

Александр Д. написал(а):

у меня тоже такой же программатор не шьет тини13а - приходится тини13 ставить - явно ошибка в ini файлах компилятора - надо бы Марку сообщить, да не отвечает он по пол года...  у них там новый мега проект...

урра, я не един... может соберемся толпой, покумекаем да поправим *.ini файлик??? (или там *.DAT файл)
если кто в курсе что да как там, отзовитесь!

Отредактировано UN8JAB (2012-11-17 21:16:49)

0

6

по крайней мере, это для usbasp - привыборе в самой среде. Когда шил через внешний софт - всё хорошо!

0

7

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

код тут

' MCU config
$regfile = "attiny13.dat"
$crystal = 9600000
$hwstack = 8
$swstack = 16
$framesize = 16
$prog &HFF , &H7A , &HFF , &H00
' Pin config
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Config Portb.0 = Output
Config Portb.1 = Output
Config Portb.3 = Output
Config Pinb.4 = Input
' Var declare
Dim Rezhim As Word
Dim Vremya As Word
Dim V As Word
Dim Agg As Byte
'Rezhim = 0
' Sub declare
Declare Sub 0
Declare Sub 1
Declare Sub 2
Declare Sub 3
Declare Sub 4
Declare Sub 5
Declare Sub 6
Declare Sub 7
Declare Sub 8
' General source
Start Adc
Do
V = Getadc(2)
Rezhim = Rnd(1023) + V
Rezhim = Rezhim Mod 7
If Agg = Rezhim Then Rezhim = Rnd(1023) + V
Vremya =
If Rezhim = 0 Then Gosub 0
If Rezhim = 1 Then Gosub 1
If Rezhim = 2 Then Gosub 2
If Rezhim = 3 Then Gosub 3
If Rezhim = 4 Then Gosub 4
If Rezhim = 5 Then Gosub 5
If Rezhim = 6 Then Gosub 6
If Rezhim = 7 Then Gosub 7
Waitms Vremya
Agg = Rezhim
Loop
End
Sub 0
Portb.0 = 1
Portb.3 = 1
Portb.1 = 1
End Sub
Sub 1
Portb.0 = 0
Portb.3 = 0
Portb.1 = 1
End Sub
Sub 2
Portb.0 = 0
Portb.3 = 1
Portb.1 = 0
End Sub
Sub 3
Portb.0 = 0
Portb.3 = 1
Portb.1 = 1
End Sub
Sub 4
Portb.0 = 1
Portb.3 = 0
Portb.1 = 0
End Sub
Sub 5
Portb.0 = 1
Portb.3 = 0
Portb.1 = 1
End Sub
Sub 6
Portb.0 = 1
Portb.3 = 1
Portb.1 = 0
End Sub

скоро будет готова схемка, проект в протеусе и фото, возможно и видео.... так что проект "простая новогодняя гирлянда" будет завершен... :flag:
но и сейчас уже красиво смотрится.. RGB блин))) :shine:

Отредактировано UN8JAB (2012-11-18 21:32:44)

0

8

UN8JAB написал(а):

коро будет готова схемка, проект в протеусе и фото, возможно и видео.... так что проект "простая новогодняя гирлянда" будет завершен... 
но и сейчас уже красиво смотрится.. RGB блин)))

Ждём. Если наберётесь сил оформить в виде статьи, выложим на сайте http://lightportal.at.ua

0

9

Mrshilov написал(а):

А зачем вообще 8 подпрограмм? Не проще ли так:

Вообще для таких целей есть специальные переливающиеся RGB-светодиоды. Если уж делать это на МК, тогда с плавными переходами, разными режимами, реакцией на звук или освещенность температуру... Вот здесь , например, подставка под пивную кружку на той же Тини13, показывающая цветом температуру.

Может и проще! но все мы только учимся! это всего вторая моя конструкция на МК. и программа тоже вторая.

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

Отредактировано UN8JAB (2012-11-19 10:05:09)

0

10

ПОСТ №15, исправленная схема, плата и проша

Вот, нарисовал (слегка упрощенно) схему своего девайса, развел платку, выложил в доступ.
архив тут
в архиве плата и схема в JPG, а так-же платка в LAY.
резистор R4, подтягивает RST к +5В, по схема на плату не установлен, забыл.
http://s3.uploads.ru/t/7wimT.jpg
на плате есть место под разъем 10pin USB ASP, но тоже не разведен, планируется разводка проводками потом, там же можно и резистор R4 пристроить, хотя и без него, на макетке, глюков не было.
Плата под SMD, кроме стабилизатора +5В и транзюков.
кнопка выведена бля будущего усовершенствования.
в спойлере код программы для баскома.
пока каналы моргают в произвольном режиме с задержкой 200 мсек

КОД ТУТ

' MCU config
$regfile = "attiny13.dat"
$crystal = 9600000
$hwstack = 8
$swstack = 16
$framesize = 16
$prog &HFF , &H7A , &HFF , &H00
' Pin config
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Config Portb.0 = Output
Config Portb.1 = Output
Config Portb.3 = Output
Config Pinb.4 = Input
' Var declare
Dim Rezhim As Word
Dim Vremya As Word
Dim V As Word
Dim Agg As Byte
'Rezhim = 0
' Sub declare
Declare Sub 0
Declare Sub 1
Declare Sub 2
Declare Sub 3
Declare Sub 4
Declare Sub 5
Declare Sub 6
' General source
Start Adc
Do
V = Getadc(2)
Rezhim = Rnd(1023) + V
Rezhim = Rezhim Mod 7
If Agg = Rezhim Then Rezhim = Rnd(1023) + V
Vremya = 200
If Rezhim = 0 Then Gosub 0
If Rezhim = 1 Then Gosub 1
If Rezhim = 2 Then Gosub 2
If Rezhim = 3 Then Gosub 3
If Rezhim = 4 Then Gosub 4
If Rezhim = 5 Then Gosub 5
If Rezhim = 6 Then Gosub 6
Waitms Vremya
Agg = Rezhim
Loop
End
Sub 0
Portb.0 = 1
Portb.3 = 1
Portb.1 = 1
End Sub
Sub 1
Portb.0 = 0
Portb.3 = 0
Portb.1 = 1
End Sub
Sub 2
Portb.0 = 0
Portb.3 = 1
Portb.1 = 0
End Sub
Sub 3
Portb.0 = 0
Portb.3 = 1
Portb.1 = 1
End Sub
Sub 4
Portb.0 = 1
Portb.3 = 0
Portb.1 = 0
End Sub
Sub 5
Portb.0 = 1
Portb.3 = 0
Portb.1 = 1
End Sub
Sub 6
Portb.0 = 1
Portb.3 = 1
Portb.1 = 0
End Sub

размер платы 27х26 мм)))

фото готового устройства будут позже.

Отредактировано UN8JAB (2012-11-21 12:47:05)

0

11

Выкладываю исправленную схему, испровленный исходник в  BASCOM, HEX и BIN файлы, плата в LAY и в JPG.
Архив
Перед печатью плату нужно отзеркалить.
На плате нужно соединить перемычкой базу транзистора VT1 и правый вывод резистора R1. Развести дорожку не получилось.
Графику пока вставить не могу, что-то глючит.

Отредактировано UN8JAB (2012-11-21 12:46:33)

0

12

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

КОД

' MCU config
$regfile = "attiny13.dat"
$crystal = 9600000
$hwstack = 8
$swstack = 16
$framesize = 16
$prog &HFF , &H7A , &HFF , &H00
' Pin config
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Config Portb.0 = Output
Config Portb.1 = Output
Config Portb.2 = Output
Config Pinb.3 = Input
' Var declare
Dim Rezhim As Word
Dim Vremya As Word
Dim V As Word
Dim Agg As Byte
'Rezhim = 0
' Sub declare
Declare Sub 0
Declare Sub 1
Declare Sub 2
Declare Sub 3
Declare Sub 4
Declare Sub 5
Declare Sub 6
' General source
Start Adc
Do
V = Getadc(2)
Rezhim = Rnd(1023) + V
Rezhim = Rezhim Mod 7
If Agg = Rezhim Then Rezhim = Rnd(1023) + V
Vremya = 200
If Rezhim = 0 Then Gosub 0
If Rezhim = 1 Then Gosub 1
If Rezhim = 2 Then Gosub 2
If Rezhim = 3 Then Gosub 3
If Rezhim = 4 Then Gosub 4
If Rezhim = 5 Then Gosub 5
If Rezhim = 6 Then Gosub 6
Waitms Vremya
Agg = Rezhim
Loop
End
Sub 0
Portb.0 = 1
Portb.1 = 1
Portb.2 = 1
End Sub
Sub 1
Portb.0 = 0
Portb.1 = 0
Portb.2 = 1
End Sub
Sub 2
Portb.0 = 0
Portb.1 = 1
Portb.2 = 0
End Sub
Sub 3
Portb.0 = 0
Portb.1 = 1
Portb.2 = 1
End Sub
Sub 4
Portb.0 = 1
Portb.1 = 0
Portb.2 = 0
End Sub
Sub 5
Portb.0 = 1
Portb.1 = 0
Portb.2 = 1
End Sub
Sub 6
Portb.0 = 1
Portb.1 = 1
Portb.2 = 0
End Sub

PORTB.3 не подключен аппаратно собирая с окружения мусор и используется для генирации сучайного числа(псевдослучайный RND складывается со значением с АЦП).
Девайс еще развивается и код будет многократно переписан. в идеале хочу сделать три канала ШИМ, но как сделать это програмно пока не знаю. Аппаратный шим уже испробовал, но в тиньке13 только два канала ШИМ, читал, что можно через прерывание по таймеру реализовать програмный, но как точно еще пока не представляю себе.

Отредактировано UN8JAB (2012-11-21 16:08:57)

0

13

согласен

0

14

attiny13a 10 штук за 6.64$
atmega8 10 штук за 8.80$

так что аттини дешевше выйдет.
хочется по максимуму выжать из тиньки, а вообще брал их для реализации драйвера для фонаря, СИДы еще не пришли, так что пока с гирляндой колупаюсь.

а вообще лежат на столе щас тинек 9 штук, атмега8 дип 5 штук, атмега8 TQFP - 3 штуки и атмега16 TQFP - 5 штук.
но это на большие прожекты, а пока тиньку колупаю
две атмеги в TQFP уже на термометры пустил, один в гараж (гараж, погреб на полу и на уровне полок, улица), а второй в торговую точку делал, 3 холодильника, 2 морозилки, торговое помещение, склад, улица.

Отредактировано UN8JAB (2012-11-21 20:46:33)

0

15

Новая проблема! собрал схемку... все работает, если питаю контроллер от програматора... при переключении на питание от сетевого БП (9 вольт на выходе, на контроллер через кренку идет), запускается схема через раз, а то и через пять раз... если коснуться выводов контроллера, начинает беспорядочно мигать...что подскажете?

Проблему решил, кренка была паленой..
поменял, все ок, завтра с меня видео!

Отредактировано UN8JAB (2012-11-24 18:34:03)

0


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Глюк в программе или в компилляторе?