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

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

Пт дек 15, 2017 18:40:17

Здравствуйте.
Необходимо сделать "слепок" состояния порта и менять по маске только то, что нужно. На деле задача не очень сложная, это в чистом виде логические операции.

Я не настолько крут, чтоб по словам понять. Мне примерный кусок кода в BascomAvre нужен.

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

Пт дек 15, 2017 19:01:53

Очень жаль, что не хотите справиться сами. Это здорово поднимает то самое чувство. :wink: Но вдруг никто готового решения не предложит, тогда эта заметка пригодится...

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

Пусть на этих двух выводах уровни меняются аппаратно, а значит при их изменении нам не нужно заботиться о том, чтобы сохранить остальные ноги (те самые 6 ног цифр). А значит, задача только одна - при изменении этих 6 ног оставить целыми два вывода.

Случилось так, что пора на 6 ног вывести что-то нужное. Мы не знаем, что на двух неприкосновенных ногах. А значит должны сделать слепок по маске в данный момент. Пусть это будут биты 5 и 4.

СЛЕПОК = ПОРТ И 0b00110000

Теперь слепок содержит уровни только неприкосновенных ног. Все остальное в нулях. Остается собрать в кучу и цифру и слепок

ПОРТ = ЦИФРА ИЛИ СЛЕПОК.

В результате в порт отправляется код цифры, а биты 5 и 4 остаются такими, какие были на момент снятия слепка.

* Разумеется, в знакогенераторе цифр биты 5 и 4 должны быть равны 0.

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

Пт дек 15, 2017 19:25:10

Очень жаль, что не хотите справиться сами. Это здорово поднимает то самое чувство. :wink: Но вдруг никто готового решения не предложит, тогда эта заметка пригодится...

Я Гений. Можно же просто поменять местами аноды и катоды...

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

Сб дек 16, 2017 21:48:33

Странно, если последовательный порт включен то менять состояния его портов невозможно. Если не ошибаюсь.

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

Вс дек 17, 2017 02:27:50

Как отключить аппаратный txd в attiny2313? Нужен для выхода других сигналов.

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

Вс дек 17, 2017 02:37:24

UCSRB=0

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

Вс дек 17, 2017 02:57:28

UCSRB=0

Нет.

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

Вс дек 17, 2017 07:17:46

goldskif, обычный хам, подтирающий за собой свои же посты. За что уже был натыкан, ибо не в первый раз, да только все без толку. Практически во всех сообщениях только просьбы, и никакой пользы в ответ. Если это подразумевалось под словом гений, то да, безусловно гений. :tea:

vanyap1 писал(а):Странно, если последовательный порт включен то менять состояния его портов невозможно. Если не ошибаюсь.


Менять-то можно, только зачем? Мы же отдаем себе отчет в том что если работает USART, то такое вмешательство ему навредит. Я вообще не могу представить такую ситуацию, когда на приемопередатчике основан обмен данными, а мы начинаем дергать эти ноги.

UCSRB=0

Нет.


Все правильно написали, за включение-выключение отвечают биты RXEN (RX ENable) и TXEN (TX ENable) регистра UCSRB. Выключается он записью нулей в соответствующие биты. И по умолчанию USART выключен.

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

Вс дек 17, 2017 17:55:44

goldskif, обычное хамло, подтирающее за собой свои же посты. За что уже был натыкан, ибо не в первый раз, да только все без толку. Практически во всех сообщениях только просьбы, и никакой пользы в ответ. Если это подразумевалось под словом гений, то да, безусловно гений. :tea:

Я ненавижу таких советчиков. Вместо конкретного ответа они любят выдавать пространные рассуждения в менторско-поучительном тоне. Им интереснее написать еще один пространный пост ни о чем, чем одну строчку примера кода. А какую пользу в ответ вы хотели на такие посты? Только такую же. Если вы у нас тут флудер и кармодрочер, живущий на форуме ради еще одной тысячи постов и пользы в карму, то вас за это никто любить не обязан.
Да, вы абсолютно правы. Я захожу на этот форум в среднем раз в два года, чтобы попросить совета. Я -то по наивности думал, что форумы для того и существуют. А везде сидят вчерашние жертвы ЕГЭ с тысячами постов и дрочат в карму. Ни одного нормального ответа от них не дождешься, кроме как "да тут все просто, иди читай доки, очень жаль, что вы не хотите сами разобраться, достали неучи с одинаковыми вопросами и блабла..." Но когда такому гуру задашь вопрос чуть выше уровнем, так он затыкается. Ибо ничего толкового ответить не может.
Я помню, пару лет назад мне надо был скрипт написать на баше для обработки изображений. Даже не скрипт написать (это я и сам смогу), а решить одну проблему в коде.. Так на всех форумах такие же гуру сидели с такими же полезными советами. Я месяц нихрена добиться не мог. Потом наконец один великий гуру с несколькими тысячами постов соизволил снизойти до моей просьбы и высокомерно выдавил из себя кусок говнокода. Который давился, грузил проц на 100% и вешал комп.. Мне это надоело, я пошел на буржуйский тематический, через Яндекс.переводчика задал вопрос, через тридцать минут получил короткий ответ с примером кода. И через несколько минут еще пару. И все. Проблема была решена. С тех я на совковые форумы за советом обращаюсь только в самом крайне случае.. Ибо везде ссука сидят гуру, которых распирает от того, что они вчера сдали ЕГЭ и у них тыщщи постов и плюсов в карме..
Все правильно написали, за включение-выключение отвечают биты RXEN (RX ENable) и TXEN (TX ENable) регистра UCSRB. Выключается он записью нулей в соответствующие биты. И по умолчанию USART выключен.

Мое слово "НЕТ" в предыдущем посте означает, что предложенный вариант не работает. Вам что-то непонятно? И речь в моей просьбе шла об аппаратном UART, а не USART.

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

Пн дек 18, 2017 04:42:23

То бишь вы из года в год на совершенно разных форумах получаете совершенно одинаковую реакцию, и вас это не настораживает? Есть такой баянистый анекдот: «Если и третий муж бьёт по морде, может, дело не в мужьях, а в морде?».

Разумеется форумы для того и нужны, что бы делиться опытом. И за себя могу сказать точно, я никогда не отправлял курить даташиты. Даже ссылаясь на них обычно выделяю нужное место и перевожу с комментариями. И в моих ответах минимум 90% решения проблемы. Да, а на 10% уж извольте мозг напрячь. Более того, недавно сам ругался на этом же форуме с посылающими самостоятельно изучать и яндексы гуглить. Но там-то речь шла о человеке, который вообще этого ни разу не делал, и даже понятия не имел с чего начать. А если вы не в состоянии две строчки с русского перевести на бейсик в подробно расписанном ответе, при этом не первый год занимаясь этим и имея кучу примеров кода, то у меня не очень хорошие новости. Не тем вы занимаетесь.

goldskif писал(а):Я месяц нихрена добиться не мог. Потом наконец один великий гуру с несколькими тысячами постов соизволил снизойти до моей просьбы и высокомерно выдавил из себя кусок говнокода.


Вы за целый месяц не смогли разобраться в собственном скрипте, а вместо этого сидели на жопе и ждали ответа на форуме?! И после этого пишите "это я и сам смогу"? Балаболить вы можете. Вы же не в состоянии за несколько лет даже из кусков предложенного кода часы собрать, о чем вообще говорить можно.

Вы хотите писать хотелки и получать на выходе готовый код? Хотите вносить изменения в хотелки и наблюдать как код меняется? Не хотите даже пытаться в этом всем разобраться? Тогда вам в ЭТУ ТЕМУ. Пишете ТЗ, получаете предложения, и если устраивает цена то начинаете сотрудничать.

goldskif писал(а):Мое слово "НЕТ" в предыдущем посте означает, что предложенный вариант не работает. Вам что-то непонятно? И речь в моей просьбе шла об аппаратном UART, а не USART.


После этого заявления ведь очевидно, что мое предложение - лучший вариант. Подумайте хорошо, это ведь не шутки, тут же электричество. :solder:

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

Ср дек 27, 2017 07:27:16

Здравия.
Я не совсем понял разницу между 24C08 и 24C512 и как итог ничерта не работает. Соответственно прошу подсказки, пожалуйста.
Вот код:
Спойлер
Код:
$regfile = "2313def.dat"
$crystal = 4000000
$baud = 9600

Const Eeprom1w = 160                                        '&HA0   &B10100000
Const Eeprom1r = 161                                        '&HA1   &B10100001
Dim Adress As Word
Dim Tempi As Word
Dim Byte_h As Byte
Dim Byte_l As Byte

'PB5 SDA EEPROM
'PB7 SCL EEPROM
'PB6 1-Wire DS18B20
'PD0 Rx
'PD1 Tx
'PD2 INT0 Button
'PD4 T0 LED Anode

Dim Byte0 As Byte
Dim Byte1 As Byte
Dim Sign As String * 1
Dim T As Byte
Dim T1 As Byte
Dim T2 As Byte

Config 1wire = Portb.6

Config Sda = Portb.7                                        'I2C Data
Config Scl = Portb.5                                        'I2C Clock

Config Int0 = Falling

On Int0 Getout

Enable Interrupts
Enable Int0

Do

Gosub Temp

Loop

Getout:
Gosub Read_eeprom
Print "Aktual=" ; T1
Print "EEPROM=" ; T
Gosub Write_eeprom
Return


Write_eeprom:

For Adress = 0 To 511
Tempi = Adress
Shift Tempi , Left , 7
Byte_h = High(tempi)
Byte_l = Low(tempi)

I2cstart
I2cwbyte Eeprom1w
I2cwbyte Byte_h
I2cwbyte Byte_l
I2cwbyte T1
I2cstop
Next Adress
Return


Read_eeprom:
I2cstart
I2cwbyte Eeprom1w
I2cwbyte Byte_h
I2cwbyte Byte_l

I2cstart
I2cwbyte Eeprom1r
I2crbyte T , Nack
I2cstop
Return

Temp:
1wreset
1wwrite &HCC
1wwrite &H44

Waitms 750

1wreset
1wwrite &HCC
1wwrite &HBE
Byte0 = 1wread()
Byte1 = 1wread()

If Byte1 > 248 Then
 Byte0 = &HFF - Byte0
 Byte1 = &HFF - Byte1
 Sign = "-"

Else
 Sign = "+"
End If

 T1 = Byte0 / 16
 T2 = Byte1 * 16

 T1 = T1 + T2

If Sign = "-" Then
  T1 = T1 + 1
End If

If Sign = "+" And T1 = 0 Then
  Sign = " "
End If

Return

End

Собственно по нажатию кнопки читается еепром, выводится вместе с текущим значением температуры и записывается текущее в еепром.
По факту в считываемом еепроме всегда 255. Почему так?
Тут даташит на используемую память.

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

Ср дек 27, 2017 16:14:15

Код:
'PB5 SDA EEPROM
'PB7 SCL EEPROM


Config Sda = Portb.7                                        'I2C Data
Config Scl = Portb.5                                        'I2C Clock


А как в реальности, в железе?

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

Чт дек 28, 2017 07:04:39

А как в реальности, в железе?


И в железе так же, по даташиту тиньки
епта. я понял. спасибо. сейчас попробуем.
upd. Спасибо, заработало :) Не так как надо, но уже пишется-читается.

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

Чт дек 28, 2017 17:01:15

Пожалуйста. Я давно уже убедился, что 99% ошибок, я не исключение, бывают из-за невнимательности.

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

Вс дек 31, 2017 14:28:19

Всем привет!
Имеется две платы: Arduino UnoR3 и Ethernet Shield (на базе чипа W5100). Требуется по протоколу Modbus TCP передавать значение переменной (типа Integer, например) из МК на ПК.
Вопрос: приходилось ли кому-либо реализовывать подобную задачу с помощью BASCOM? Если да, то нельзя ли поделиться исходником?
Заранее, спасибо.
(P.S. В Arduino IDE это реализовать просто, но я ненавижу эту среду разработки!)

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

Пт янв 05, 2018 18:11:20

Uart

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

Сб янв 06, 2018 14:29:10

Novice user,
спасибо, но я указал в исходных данных конфигурацию аппаратки: Arduino Uno в связке с Ethernet Shield.
Взаимодействие между этим модулями обеспечивается через SPI. UART тут не при делах... :dont_know:

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

Пн янв 08, 2018 01:52:24

Подскажите ещё пожалуйста вот какую ерунду:
Если eestat 1, то ответ такой:
[1|0] : 27

Если eestat 0, то ответ такой:
[1|128] : 27
[2|0] : 27
[2|128] : 27
....
[35|0] : 27
[35|128] : 27
[36|0] : 27

Всегда 64 ячейки. Хотя предполагается, что должно быть как в первом варианте - 1 ячейка. Код ниже прилагаю.

Спойлер
Код:
Rw_eeprom:
   Addrbyte = Addrbyte + 1
   Tempi = Addrbyte
   Shift Tempi , Left , 7
   Byte_h = High(tempi)
   Byte_l = Low(tempi)
   I2cstart
      I2cwbyte Eeprom1w
      I2cwbyte Byte_h
      I2cwbyte Byte_l
   If Eestat = 1 Then 'Чтение
      I2cstart
         I2cwbyte Eeprom1r
         I2crbyte T , Nack
         Print "[" ; Byte_h ; "|" ; Byte_l ; "] : " ; T
   Else 'Запись
         I2cwbyte T1
         Print "[" ; Byte_h ; "|" ; Byte_l ; "] : " ; T1
   End If
   I2cstop
Return

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

Чт янв 11, 2018 23:13:04

Приветствую неспящих котов и котиков! :)
Мужики, выручайте. На тиньке остался один свободный PORTB.X и хочу на него повесить 2 светодиода LED1 и LED2 для индикации режима. А их целых четыре: постоянно горящий или мигающий LED1 или LED2. Подключил их последовательно и среднюю точку подключил к PORTB.X. Концы подтянул к +5В и GND. Если PORTB.X = 1 then LED1, если PORTB.X = 0 then LED2.
Собственно, вопрос: а как вывести в PORTB.X ничего, чтобы светодиоды потухли (Z-состояние?)?
т.е. If PORTB.X = ??? then LED1 = 0 : LED2 = 0 — ??
Буду признателен, если кто объяснит :idea:

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

Пт янв 12, 2018 03:59:24

Здравствуйте.

А в чем проблема? Нужно просто сделать этот пин - входом без внутренней подтяжки. Либо через DDR, либо средствами баскома. Это и будет Z-состояние.

Код:
Config PORT.X = Input


Единственное, нужно подобрать резистор R3, шунтирующий оба светодиода. Чтобы исключить свечение обоих светодиодов в режиме высокоимпедансного состояния пина. Ведь в этом случае мы получим два последовательно включенных светодиода, между плюсом и минусом питания.

Изображение

Вы уточняйте, если что-то непонятно.
Ответить