Обсуждаем контроллеры компании Atmel.
Ответить

Re: BASCOM AVR в вопросах и ответах

Ср июл 12, 2017 19:19:12

У меня ругается только на отсутствие библиотеки. Надеюсь сообразили убрать из строки 123 команду "Readeeprom"?

Re: BASCOM AVR в вопросах и ответах

Чт июл 13, 2017 03:58:15

Вы не номер смотрите, а саму ошибку читайте. Оно же пишет в чем дело.

Re: BASCOM AVR в вопросах и ответах

Чт июл 13, 2017 07:19:45

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

Re: BASCOM AVR в вопросах и ответах

Чт июл 13, 2017 07:31:21

Выше пост от vem566. Свой код покажите, где ошибка.

Re: BASCOM AVR в вопросах и ответах

Чт июл 13, 2017 08:10:38

1. 123 U_min = U_min_e - это чтение ?
2. Ошибку уже не выдает но ничего в память не пишет , посмотрите пожалуйста что не так ?
Вложения
форум.rar
(314.52 KiB) Скачиваний: 296

Re: BASCOM AVR в вопросах и ответах

Пт июл 14, 2017 09:29:42

В программе:

561 Writeeeprom U_min_e : X = X + 1

Должно быть:

561 U_min_e = U_min : X = X + 1

Вы решили, что чем читать тот же Help, проще пройти интерактивный курс Bascom? Непонятки ведь не от "запутывания мозгов", а от элементарного незнания. Есть хорошие учебники по Bascomу. Там все это описано.

Re: BASCOM AVR в вопросах и ответах

Пт июл 14, 2017 10:03:25

ИзображениеВсе сделал как вы написали , компилятор выдал ошибку.

Добавлено after 8 minutes 54 seconds:
Получается не работает с этим типом переменной U_min As Byte , а скаким типом будет работать ?
Вложения
242.rar
(55.31 KiB) Скачиваний: 319

Re: BASCOM AVR в вопросах и ответах

Пт июл 14, 2017 10:05:20

компилятор выдал ошибку.


Как заводили переменные U_min_e и U_min ?
Обе переменные должны быть одинакового типа.

Re: BASCOM AVR в вопросах и ответах

Пт июл 14, 2017 10:07:49

vem566 писал(а):Есть хорошие учебники по Bascomу. Там все это описано

OLEGKARAS, в одном месте Word, в другом Byte, в общем человек хочет, что бы ему не помогали, а за него переделали программу.

Re: BASCOM AVR в вопросах и ответах

Пт июл 14, 2017 10:10:34

У меня получается все переменные должны быть Eram Word ?

Re: BASCOM AVR в вопросах и ответах

Пт июл 14, 2017 10:17:55

У меня получается все переменные должны быть Eram Word ?


Переменные могут быть разных типов. Но переменная типа Eram должна быть одинаковой по типу с обычной переменной, в которую вы эту Eram-переменную переписываете.
И наоборот.
Естественно, что в переменную типа Byte переменная типа Word не влезет, поэтому компилятор и ругается.

Знак равенства ( = ) вовсе не означает "равно". Он означает "берет значение". A_eram = A и A = A_Eram - это две большие разницы.

Вот вам учебник. Русский. Сам на нем начинал.

Re: BASCOM AVR в вопросах и ответах

Пт июл 14, 2017 10:42:41

Почему нельзя записать переменную памяти типа Byte - Dim U_min_e As Eram Byte ?

Re: BASCOM AVR в вопросах и ответах

Пт июл 14, 2017 10:46:19

Почему нельзя записать переменную памяти типа Byte - Dim U_min_e As Eram Byte ?


Можно. Только тогда переменная U_min тоже должна быть Byte.

Код:
Dim U_min as byte
Dim U_min_e as eram byte

U_min  = U_min_e 'читаем из Eeprom
U_min_e = U_min 'пишем в Eeprom

Re: BASCOM AVR в вопросах и ответах

Пт июл 14, 2017 10:52:36

Так я так и делал , но в память ни чего не пишет , а если переменная типа Word то пишет .

Re: BASCOM AVR в вопросах и ответах

Пт июл 14, 2017 11:06:19

Так я так и делал , но в память ни чего не пишет , а если переменная типа Word то пишет .


Проверяйте код. Тут проще уже просто некуда.
Eeprom затирается когда вы заливаете в мк очередную версию программы. Поставьте фуз "Preserve Eeprom when chip erase" (в баскомовской прошивалке). И Eeprom очищаться не будет.

Re: BASCOM AVR в вопросах и ответах

Пт июл 14, 2017 12:31:19

Я проверяю в протеусе , попробую этот кусок программы отдельно от основной.

Добавлено after 23 minutes 59 seconds:
НЕ пойму в чем дело , отдельно кусок программы работает а в основной программе нет, как в протеусе посмотреть что происходит в ячейках памяти , записывается или нет ?

Добавлено after 48 minutes 35 seconds:
Нашел где в протеусе смотреть память , и четко видно если Dim U_min_e as eram Word - то ячейки записываются а если Dim U_min_e as eram byte - нет.

Re: BASCOM AVR в вопросах и ответах

Вт июл 18, 2017 20:43:00

Проверил в железе , все работает , в протеусе нет.

Re: BASCOM AVR в вопросах и ответах

Пн июл 24, 2017 18:09:44

Как можно отключить /включить метку ?

Re: BASCOM AVR в вопросах и ответах

Сб авг 19, 2017 14:23:21

все,разобрался

Re: BASCOM AVR в вопросах и ответах

Пт окт 13, 2017 19:51:43

Собираю станок для нарезки кабеля, станок почти доделал, осталось только доделать режущую часть. А вот с программой вышли сложности, а именно. Не работает в железе программа, в протеусе все работает чётко, в железе счётчики бегают безостановочно. Вместо энкодера использую две кнопки, но даже с подключённым энкодером толку нет, почему так? Очень нужна ваша помощь.

Проект прикрепил, в том числе и в протеусе. При запуске протеуса первоначально жмем кнопку с подписью "сначала нажать эту", далее жмём либо L meter либоPCS , все работает, а в железе нету, помогите подправить код


Код:
$regfile = "m8def.dat"
$crystal = 8000000

Config Lcdpin = Pin , Rs = Portc.0 , E = Portb.5 , Db4 = Portb.4 , Db5 = Portb.3 , Db6 = Portb.2 , Db7 = Portb.0
Config Lcd = 16 * 4

Dim W As Word
Dim P As Word

Config Adc = Single , Prescaler = Auto , Reference = Internal
Config Portd.6 = Input                                      ' кнопка старт
Config Portb.6 = Output                                     ' нож
Config Portb.7 = Output                                     ' двигатель


Config Int0 = Falling                                     
Config Int1 = Falling
On Int0 Encod
On Int1 Encod2

Gifr = 64
Gifr = 128

Enable Interrupts
Enable Int0
Enable Int1


Cls
Cursor Off Noblink

Start Adc
Do

Locate 2 , 1
Lcd "L=" ; Getadc(1) ; "cm"                                 'длина
If Getadc(1) < 10 Then
Locate 2 , 6
Lcd " "
End If

If Pind.6 = 1 Then
Portb.7 = 1                                                 ' начинаем крутить двигатель
Else
End If



If Pind.6 = 1 Then                                          'если нажали кнопку старта
If W = Getadc(1) Then
Locate 2 , 8
Lcd "-"
Waitms 200
Portb.7 = 0                                                 ' останавиваем двигатель пока работает нож
Waitms 50
Portb.6 = 1                                                 'отрезаем
Waitms 300
Portb.6 = 0
Waitms 100
W = 0
Locate 2 , 8
Lcd " "
End If
End If


Locate 1 , 1
Lcd W

Locate 1 , 8
Lcd P



Locate 2 , 11
Lcd "pcs:" ; Getadc(2)                                      ' количество
If Getadc(2) < 10 Then
Locate 2 , 16
Lcd " "
End If

Locate 1 , 11
Lcd "     "

If P = Getadc(2) Then                                       ' проверяем счетчик
Goto Ready
Else
End If

If P = Getadc(2) Then                                       ' проверяем счетчик
'Locate 1 , 11
'Lcd "READY"
Waitms 500
End If




Loop
End
Return


Encod:                                                      ' тут узнаем в каком направлении вращают ручку энкодера
  If W >= 100 Then                                          'добавляем условие сброса переменной
   W = 0                                                    'сбрасываем переменную
   End If

  Waitms 2                                                  ' ждем пока утихнет дребезг контактов

  If Pind.5 = 1 Then                                        ' если на ноге единица (импульс не пришел) тогда
  Incr W                                                    ' инкременируем переменную (увеличиваем на 1)
  Else                                                      ' в обратном случае
  Decr W                                                    ' декрементируем переменную (уменьшаем на 1)
  End If

  Gifr = 64                                                 ' сбрасываем регистр хранения прерывания INT0

Return




Encod2:                                                     ' тут узнаем в каком направлении вращают ручку энкодера
  If P >= 100 Then                                          'добавляем условие сброса переменной
   P = 0                                                    'сбрасываем переменную
   End If

  Waitms 2                                                  ' ждем пока утихнет дребезг контактов

  If Pind.5 = 1 Then                                        ' если на ноге единица (импульс не пришел) тогда
  Incr P                                                    ' инкременируем переменную (увеличиваем на 1)
  Else                                                      ' в обратном случае
  Decr P                                                    ' декрементируем переменную (уменьшаем на 1)
  End If

  Gifr = 128                                                ' сбрасываем регистр хранения прерывания INT0


Return


Ready:
Locate 1 , 11
Lcd "READY"
Waitms 500
Portb.7 = 0                                                 ' останавливаем двигатель
End
Вложения
Новая папка (2).rar
(55.7 KiB) Скачиваний: 299
Ответить