Кнопка! От сложного к простому.

Здесь обсуждаем Arduino
Аватара пользователя
gurvinok
Сообщения: 1480
Зарегистрирован: 02 мар 2013, 09:18
Откуда: Москва

Re: Кнопка! От сложного к простому.

Сообщение gurvinok » 05 янв 2016, 22:56

Переделал под айфон.
Если долго мучиться, может быть получится.

Аватара пользователя
GhostX
Сообщения: 1112
Зарегистрирован: 07 дек 2015, 14:40
Откуда: Рязань

Re: Кнопка! От сложного к простому.

Сообщение GhostX » 05 янв 2016, 23:22

Это на гитарке?
Красиво.))
А я не гитарист ни разу.
Помню была гитарка, лет на 5 меня постарше. Я с ней мучился настраивал, чинил.
Научился играть только паре мелодий металика баллада, не помнб как называется, но все ее знают.
И вот это
А потом надоело, забросил.

Аватара пользователя
GhostX
Сообщения: 1112
Зарегистрирован: 07 дек 2015, 14:40
Откуда: Рязань

Re: Кнопка! От сложного к простому.

Сообщение GhostX » 05 янв 2016, 23:35

Почти разобрался, тут вроде описано
Последний раз редактировалось GhostX 06 янв 2016, 15:15, всего редактировалось 1 раз.

Аватара пользователя
gurvinok
Сообщения: 1480
Зарегистрирован: 02 мар 2013, 09:18
Откуда: Москва

Re: Кнопка! От сложного к простому.

Сообщение gurvinok » 05 янв 2016, 23:37

Есть такой вариант.
вот.aiff
(22.9 МБ) 226 скачиваний
Если долго мучиться, может быть получится.

Аватара пользователя
GhostX
Сообщения: 1112
Зарегистрирован: 07 дек 2015, 14:40
Откуда: Рязань

Re: Кнопка! От сложного к простому.

Сообщение GhostX » 06 янв 2016, 08:16

Какой то мало знакомый вариант, но начало очень похоже, на ту самую балладу. :)
А что за гитара, нормальная? Везде слышу дребезжание порогов...

Аватара пользователя
GhostX
Сообщения: 1112
Зарегистрирован: 07 дек 2015, 14:40
Откуда: Рязань

Re: Кнопка! От сложного к простому.

Сообщение GhostX » 06 янв 2016, 10:21

Не могу понять есть порт, есть номер бита...
У ардуины портов получается всего три?
По полочкам не могу разложить.
Пересмотрел киношку еще раз, и пришла в голову аналогия
Прилетели мы в Африку, поймали папуаса в листьях на поясе, босого, со скорлупой на пипиське и копьем.
Успокоили как то, и сидим рассказываем вот ботинки! Они кожаные! У них резиновая подошва! Есть шнурки, что здесь не понятного? Дырочки для шнурков обрамлены металическими заклепками! Подкладка, стелька и тд
А он такой все слушает, говорят ему на его языке, слова понимает, но о чем идет речь хрен поймет. Так как он не носил ботинки и не знает что это такое. Шнурки ему тоже не понятны и куда их вставлять тоже не ясно. Но их можно натянуть на лук, думает он...
Вот просматривая эту киношку, я ощущаю себя таким папуасом.
Вроде слова русские, что такое регистры объяснили как то давно. Что такое таймер, тоже вроде понятно, но связи между всем этим и реальной платой ардуины просто нету. Эти связи еще ни кто не строил. Причем их даже не нужно все выстраивать достаточно построить несколько, а остальные сами выстроятся по экстраполяции.
У вас есть дети?
Допустим есть. Сын 12 лет пришел и говорит, я тут узнал про ардуину, что это и как это. Ведь в голову не придет удивляться почему он не знает того или этого...
Я вот смотрю на схему ардуины и вижу PC1 PB2 PD0. Где PA0 или там ног как у сороконожки, а портов всего 4.... Где то что то уходит не туда...
И интернет не говорит толком или как мигать диодом или вон даташит смотри там все есть, чего нет, ты знать должен по умолчанию...
И вот эта темная пропасть бесит. Вроде все рядом но ни кто банально объяснить не может, что вот вилка ее вставляем в розетку, а вот тоже вилка, но ей едят.
Отчаяние мимо пробежало, я из окна на него посмотрел....

Аватара пользователя
gurvinok
Сообщения: 1480
Зарегистрирован: 02 мар 2013, 09:18
Откуда: Москва

Re: Кнопка! От сложного к простому.

Сообщение gurvinok » 06 янв 2016, 13:16

Гитара Эпифон за 800$. Чтобы не было дребезга, нужно около 3000$.
А теперь про папуаса.
У папуаса есть глаза, нос, рот и уши. Когда он хочет есть, то он начинает получать информацию из вне для поиска пищи. Настраивает нос, глаза и рот на вход. Далее увидев и унюхав банан, он его съедает. Далее он переводит глаза, нос и уши в неопределенное состояние, а рот на выход. Далее изо рта выходят звуки благодати о набитом желудке.
У контроллера тоже самое. Вот картинка для понимания.
FJKF477HBNXWRT8.png
Каждая ножка микроконтроллера имеет свое название. Большинство из них называются PBx, PCx,PDx.
Как раз это и есть порты. Каждый порт максимум 8 битный. То есть имеет название от Px0 до Px7. Бывает когда ножек не хватает и какие-то порты не полные. Конкретно у данного МК нет PC7. Любой порт оперирует тремя регистрами.
DDRx - регистр управления. Данный регистр указывает как должен быть настроен каждый разряд конкретного порта. На вход или на выход. Например нам нужно настроить разряд 0 порта С на выход. Пишем DDRC |= (1 << DDRC0); То есть теперь в регистре управления будет 0b00000001. Единица настраивает на выход, а ноль на вход. Так как в ардуино портов как бы нет, то для понимания их раздели на псевдоножки от 1 до 13. По сути это и есть порты. На пример у ардуино на выводе 13 висит светодиод. Данная вывод подключен к разряду 5 порта В. Следующий регистр это PORTx занимается выводом данных в порт. Если порт настроен на выход, то что мы запишем в этот регистр, то и будет на ножках МК. Например если пин 5 на порту В мы настроилт на выход DDRB |= (1 << DDRB5); то записав PORTB |= (1 << PORTB5); можно увидеть что светодиод на выводе 13 ардуины загорелся. А если написать так PORTB &= ~(1 << PORTB5); то светодиод погаснет. Еще данный регистр может подключать внутренний подтягивающий резистор в режиме чтения. Например настраиваем ножку 5 порта В как вход. DDRB &= ~(1 << DDRB5); А далее подключаем внутренний подтягивающий резистор этого вывода PORTB |= (1 << PORTB5); Теперь у нас вывод 13 настроен на вход и подтянут к плюсу внутренним резистором. И наконец последний регистр это регистр чтения PINx. Данный регистр хранит в себе текущие значение ножек порта МК в режиме чтения. Например настраиваем ножку 1 порта D на вход PORTD &= ~(1 << PORTD1); а ножку 5 порта В на вывод DDRB |= (1 << PORTB5); Теперь вывод 1 настроен на вход. Далее подтягиваем ногу к питанию PORTD |= (1 << PORTD1); Далее пишем PORTB = PIND; Теперь пока вывод ардуины 1 висит в воздухе светодиод на выводе 13 горит. Но стоит прижать первый вывод к нулю, как тут же светодиод погаснет.
А теперь напишем свою ардуину)))

Код: Выделить всё


#define OUTPUT 1
#define INPUT 0
#define HIGH 1
#define LOW 0

void pinMode(char pin, char level)
{
    if(pin > 7)
        {
            if(level) DDRD |= (1 << (pin - 7));
            else DDRD &= ~(1 << (pin - 7));
        }
    else
        {
            if(level) DDRB |= (1 << pin);
            else DDRB &= ~(1 << pin);
        }
}

void digitalWrite(char pin, char level)
{
    if(pin > 7)
        {
            if(level) PORTD |= (1 << (pin - 7));
            else PORTD &= ~(1 << (pin - 7));
        }
    else
        {
            if(level) PORTB |= (1 << pin);
            else PORTB &= ~(1 << pin);
        }
}

char digitalRead(char pin)
{
    if(pin > 7)
        {
            return PIND $= (1 << (pin - 7));
        }
    else
        {
            return PINB $= (1 << (pin - 7));
        }
}

void setup() {
 
    pinMode(1, INPUT);
    pinMode(13, OUTPUT);
}

void loop() {

    if(digitalRead(1)) digitalWrite(13, HIGH);
    else digitalWrite(13, LOW);
}

Вот как-то так.
Если долго мучиться, может быть получится.

Аватара пользователя
GhostX
Сообщения: 1112
Зарегистрирован: 07 дек 2015, 14:40
Откуда: Рязань

Re: Кнопка! От сложного к простому.

Сообщение GhostX » 06 янв 2016, 18:03

Гитара Эпифон за 800$. Чтобы не было дребезга, нужно около 3000$.
или Мааааленький надфилек и руки не из задницы.)) Я свою старушку до последнего латал, пока у нее от влажности из за небрежного хранения в сыром гараже, не изменились расстояния между ладами.)) И она вообще перестала строить. Но даже тогда не дребезжала.))
За совет ответственности не несу, пилить порожки и лады(если есть неровности) на свой страх и риск.)) :)
Данная вывод подключен к разряду 5 порта В.
B или C?
Составное побитовое И (&=)
Составное побитовое ИЛИ (|=) - для чего эти хитрожопые битовые операторы?
Побитовое НЕ (~)
Я разобрался как они работают, но где используются не совсем понятно. (И) могу представить например, подтянуть не используемые ноги ардуины к питанию внутренними подтягивающими резисторами, через маску. Зачем, вопрос десятый... но тут хоть логику увидел, оператор (ИЛИ) их отключит. (НЕ) инвертирует.
вроде просто, но пока не понятно зачем...
Побитовый свдиг влево (<<), побитовый сдвиг вправо (>>) умножение и деление на 2 в степени х. К этому надо привыкать.)))) Школьникам завидую, им сказали вот все это, что я выше написал, вот так, они не чего другого не знаю, кивнули, ну так , то пусть так, по барабану. А сейчас сказали, вот так это, и сидишь башку ломаешь, а почему именно так, а не как то иначе, а зачем.... FUCK!!!!
Вот в ардуине есть вывод данных через сериал порт, она их выдает, мы получаем, а когда скорость приема и передачи не совпадают, получаются крякобязы....
Просидев половину дня над этими аброкадабрами, я на столько незначительно продвинулся, что сделал вывод, я слишком быстро прыгать начал.
Последний раз редактировалось GhostX 07 янв 2016, 03:41, всего редактировалось 1 раз.

Аватара пользователя
GhostX
Сообщения: 1112
Зарегистрирован: 07 дек 2015, 14:40
Откуда: Рязань

Re: Кнопка! От сложного к простому.

Сообщение GhostX » 06 янв 2016, 18:52

:lol: Я понял, о чем тут речь шла.
Это конечно после не понятно чего, вычитанного отовсюду. :lol:
Изображение
1)порт PINC 8 бит, на каждый разряд по ноге микросхемы. правильно я понимаю?
Например там нажата кнопка и на порту число 0x01 или 0b00000001. ок, а если кнопка на 3 пине порта "С" нажата, то это будет выглядеть вот так: 0b00000100 или 0x03?
2) 7 раз подумай, что делаешь работая с регистрами, иначе можно спалить весь порт нахрен. Так?

Аватара пользователя
gurvinok
Сообщения: 1480
Зарегистрирован: 02 мар 2013, 09:18
Откуда: Москва

Re: Кнопка! От сложного к простому.

Сообщение gurvinok » 07 янв 2016, 12:51

Именно. Наконец-то прозрение. Правда есть одна неточность))) 0b00000100 это не 0x03, а 0x04.
В бинаре ститают как и по нашему десятеричному.

Код: Выделить всё

Двоичная        Десятичная   Шеснадцатиричная
0b00000000     0                  0x00
0b00000001     1                  0x01
0b00000010     2                  0x02
0b00000011     3                  0x03
0b00000100     4                  0x04
0b00000101     5                  0x05
0b00000110     6                  0x06
0b00000111     7                  0x07
0b00001000     8                  0x08
0b00001001     9                  0x09
0b00001010     10                 0x0A
0b00001011     11                 0x0B
0b00001100     12                 0x0C
0b00001101     13                 0x0D
0b00001110     14                 0x0E
0b00001111     15                 0x0F
Если долго мучиться, может быть получится.

Ответить