Jump to content

Recommended Posts

помогите разобраться с AT24C64 ...

два дня мучаюсь. хочу программно реализовать I2C.

отправляю "старт", затем адрес 0xA0, получаю ACK = 0, затем "стоп".

отправляю "старт", затем адрес 0x00, получаю ACK = 1, затем "стоп".

т.е. микросхема отвечает.

"Старт", 0xA0, первый байт адреса затем в ответ ACK = 0, второй байт и снова ACK = 0, данные и ACK = 0.

т.е. данные записались.

а вот прочитать никак не могу.

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

спасибо.

Edited by Siquel

Share this post


Link to post
Share on other sites
Когда адрес послан, каждое устройство в системе сравнивает первые семь бит после состояния START с собственным адресом. Если они совпадают, устройство считает себя выбранным в качестве SLAVE-а передатчика или приемника в зависимости от бита R/W.

Вы учитываете, что адрес это только семь бит, а восьмой бит (нулевой бит) указывает, что мы будем делать, читать или писать?

Share this post


Link to post
Share on other sites
Когда адрес послан, каждое устройство в системе сравнивает первые семь бит после состояния START с собственным адресом. Если они совпадают, устройство считает себя выбранным в качестве SLAVE-а передатчика или приемника в зависимости от бита R/W.

Вы учитываете, что адрес это только семь бит, а восьмой бит (нулевой бит) указывает, что мы будем делать, читать или писать?

да, учитываю. напишу как я читаю:

"Старт", 0xA0, два байта адреса с получением ACK.

затем "старт2", 0xA1, получаю ACK = 0, и потом почему постоянно 0xFF читаю.

Edited by Siquel

Share this post


Link to post
Share on other sites

Особенности схемотехники и трассировки печатных плат для STM32WB55

Разработка новых устройств на базе беспроводного микроконтроллера STM32WB от STMicroelectronics может быть сделана в короткий срок, если выполнять некоторые важные правила и воспользоваться готовыми конструктивными решениями и рекомендациями инженеров ST.

Читать статью

Все правильно.

Тогда такие предположения.

1. На ножке 7 какой у Вас уровень? (должна быть подключена к земле, а то может быть Вы в микросхему ни чего и не записали и она честно Вам выдает FF)

2. После записи данных команду "Stop" формируете? Проверяли сторонними средствами (например программатором), что Вы действительно туда что то записали?

Edited by rtfcnf

Share this post


Link to post
Share on other sites
Если взять любой терминал и послать в порт некие данные(например наборы FFFFFFFFFFF0000000000 на низкой скорости) то можно заметить моргание второго светодиода.
\

Как это сделать. Мне инструкцию для чайников:)

Share this post


Link to post
Share on other sites
                     

CoolGaN - на предельной скорости коммутации!

Решения на галлий-нитриде (GaN) обладают фундаментальными преимуществами перед кремнием. В частности, имея более высокую критическую напряжённость электрического поля, в сравнении с традиционными кремниевыми транзисторами, транзисторы на основе галлий-нитрида обладают выдающимися динамическими характеристиками, что позволяет коммутировать их на высоких частотах. Семейство CoolGaN™ – это именно то, что необходимо, чтобы поднять ваши устройства на принципиально новый уровень. Мы собрали все самые интересные материалы по данной теме на одной странице.

Читать статьи

:dance2: аааа! сделал! блин на третий день))

первая ошибка была в том, что я забыл переключить D в режим выхода после получения ACK. :blush: а вторая, как я и подозревал была в отправке повторного "старт".

я просто опускал D, а потом опускал C.

а нужно было поднять D, поднять C и потом уже опускать D и C.

Если взять любой терминал и послать в порт некие данные(например наборы FFFFFFFFFFF0000000000 на низкой скорости) то можно заметить моргание второго светодиода.
\

Как это сделать. Мне инструкцию для чайников:)

http://softsearch.ru/programs/123-258-wterm-download.shtml

Share this post


Link to post
Share on other sites

Посоветуйте как лучше организовать сортировку данных для AVR в порядке возрастания и убывания? как в паскале методом пузырька? пока значений немного в районе 20.

Share this post


Link to post
Share on other sites

МакроАссемблер! данные простые числа до 100. данные хранятся во флаш потом органищуется их пересылка в ОЗУ, в начале я как понимаю в буферную зону иЛи в стек,а потом в началО ОЗУ они записываются в порядке возрастания(убывания)

Share this post


Link to post
Share on other sites

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

У меня пару вопросов, МК ATtiny2313:

1. Слышал что перед тем как прошивать надо еще дрова установить туда, зачем там дрова? если можно ссылочку, почитать...

2. При подключении МК к программатору, на МК должно подаваться только питание и 5 проводов от программатора? т.е. "в скобках указаны номера ног" +5в(1,20), mosi(17), miso(18), sck(19), reset(1), GND(10) верно?

3. По схеме у меня +5в подается на 1 и 20 ногу, при подключении к программатору reset на 1 ноге, надо ли при программировании отключать 1 ногу от +5в питания?

Заранее спасибо за ответы)

Share this post


Link to post
Share on other sites

данные простые числа до 100.

Вы поаккуратней с терминами, здесь для многих простые числа это 1,3,5,7 итд:D

Вы наверно имели виду целые числа.

данные хранятся во флаш потом органищуется их пересылка в ОЗУ, в начале я как понимаю в буферную зону иЛи в стек,а потом в началО ОЗУ они записываются в порядке возрастания(убывания)

Можно и так, но имейте ввиду, что ОЗУ у МК как правило мало и весь ряд может не поместиться там.

Что мешает делать это во флеше?

Share this post


Link to post
Share on other sites

А есть пики с АЦП и ЦАП на одном чипе?

В качестве ЦАПа в 8-разрядных МК обычно используют ШИМ.

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

Но в сигнальных контроллерах (16-разрядных dsPIC33), есть даже звуковые ЦАПы и соответственно АЦП до 1,1 MSPS.

Share this post


Link to post
Share on other sites

Скажите, если AVR настроен на тактирование внешним тактовым сигналом, он "заведется" от кварца? И наоборот, если настроен на кварц, "заведется" от внешнего сигнала на XT1? Делаю программатор. Схема "дает" постоянный меандр 1Мгц для тактирования прошиваемого МК. Может нужно будет еще и кварц предусмотреть?

Share this post


Link to post
Share on other sites

А есть пики с АЦП и ЦАП на одном чипе?

На счёт пиков не знаю, но точно есть у Analog Devices и Silicon Laboratories.

Share this post


Link to post
Share on other sites

В сигнальных контроллерах (16-разрядных dsPIC33), есть даже звуковые ЦАПы и соответственно АЦП до 1,1 MSPS.

Нельзя ли этот звуковой контроллер применить в SDR приемнике? Там как раз требуется оцифровка, побитная дигитальная обработка и потом преобразование результата в аудиосигнал.

Share this post


Link to post
Share on other sites

А есть пики с АЦП и ЦАП на одном чипе?

ЦАП получается из ШИМ ( он есть во многих PIC и AVR ) добавлением резистора и конденсатора, а иногда еще и О.У. :D

Share this post


Link to post
Share on other sites
Скажите, если AVR настроен на тактирование внешним тактовым сигналом, он "заведется" от кварца? И наоборот, если настроен на кварц, "заведется" от внешнего сигнала на XT1?

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

ЦАП получается из ШИМ ( он есть во многих PIC и AVR ) добавлением резистора и конденсатора

Только не надо забывать что в этом случае полностью избавится от "помех" не получится, и у этого ЦАП будет ограничено быстродействие - чем больше постоянная времени RC-цепочки, тем меньше быстродействие и меньше пульсации. Для медленно изменяющихся сигналов такой способ еще пойдет, но уже на звуковых частотах возникают серьезные проблемы.

Например чтобы сделать 8 бит ЦАП опрная частота должна быть не меньше чем в 256 раз больше чем частота отсчетов - это без фильтрации, а если необходим чистый аналоговый сигнал на выходе - частоту повышать придется еще раз в 10.

Share this post


Link to post
Share on other sites

Всем привет.

Помогите пожалуйста.

Собираю устройство на основе AT89S53 но не где не могу найти этот МК. Есть возможность купить AT89S8253. Посмотрел даташиты на них – вроде одинаковое, по крайней мере все ноги и объем памяти одинаково. Вопрос – можно ли заменить AT89S53 на AT89S8253 без изменения прошивки??? То есть зашить в AT89S8253 прошивку которая предназначенная для AT89S53. И будет ли оно работать, хотябы теоретически...

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Дальше мне понятно - нужно покупать проц и пробовать…

А еще такой вопрос – на мой проект есть исподники. Я так понимаю, что их можно будет подкорректировать под 8253??? Или нужно будет писать прошивку абсолютно заново под конкретный МК???

Share this post


Link to post
Share on other sites

Надо смотреть даташиты. Система команд-то одна, отличие может быть в переферии и возможно нужно будет переделать кое-что если будут существенные отличия.

Share this post


Link to post
Share on other sites

Покупаю проц, пробую шить, а дальше будет видно…

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

Спасибо за помощь.

Share this post


Link to post
Share on other sites

Доброго времени суток!

Сам я физик по образованию, так что то, что происходит с микросхемами понимаю лишь теоретически.

Но тем не менее на мою долю выпало следующее:

для нашего любительского чемпионата по ледовому ралли потребовалось информационное табло.формата 888 88:88,88 88:88,88 и так пять строк подряд

ну то есть на семисегментниках, так я думаю попроще будет.

светодиоды, как я понимаю, нужны не менее 2Кд, чтобы при солнечном свете все это дело было видно.

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

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

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

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

питание по выбору-12 или 220В.

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

заранее спасибо!

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Similar Content

    • By Максим123456789
      делаю диплом, в схеме у меня микроконтроллер PIC16F688 и мне нужно его заменить на ATmega. Не могу найти похожий
    • By Anton Bondarenko
      Всем привет
      Прошу не ругать, впервые подобный вопрос задаю.
      Хочу сделать прибор, который будет посылать сигнал, когда возле прибора будет проходить металлический предмет. 
      — угол отслеживания до 30° а лучше прямая линия, траектория
      — время реакции очень высокое до 100 мс
      — ширина проема в котором нужно сканировать от 10 до 20метров,
      — передача сигнала через вифи
      Может есть готовые решения, или отдельные компоненты.
      Подскажите пжл в каком направлении искать.
      Смотрел датчики движения, но главная проблема — время реакции.
      Спасибо
       
    • By Sofia Vin
      Предлагаем проектную работу в Москве:
      Микроконтроллер STM32F103.
        
      Есть встроенный код с использованием функций библиотеки FreeRTOS, код имеет описанный протокол для связи с внешним миром.
        
      Необходимо проводить доработку кода под задачи программиста верхнего уровня и его тестирование в составе оборудования. 
      Работа в лаборатории (м.Университет) и удаленно. 
      Оплата по договоренности.
      Если Вы обладаете опытом схемотехнического проектирования и программирования микроконтроллеров, и Вас заинтересовала данная возможность, ждем Ваши отклики по контактным данным:
      8 (925) 023-60-02   Алексей
      E-mail: nassa@marathon.ru
       
    • By Антон Плюшкин
      В общем есть небольшая тривиальная задача - сделать свитюльку. Контроллер управляет светодиодиками, цвета меняются, людишки довольны.
      Схема проста: Attiny44a -> 2n3904 x3 -> RGB-светодиод.
      Собрал, протестил, всё норм, но!
      Как только в коде я использую функцию задержки - _delay_ms (util/delay.h) - контроллер повисает!
      #define F_CPU 16000000UL #include <avr/io.h> #include <util/delay.h> int main(void) { // Input/Output Ports initialization // Port A initialization // Function: Bit7=Out Bit6=Out Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In DDRA=(1<<DDA7) | (1<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) | (0<<DDA1) | (0<<DDA0); // State: Bit7=0 Bit6=0 Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0); // Port B initialization // Function: Bit3=In Bit2=Out Bit1=In Bit0=In DDRB=(0<<DDB3) | (1<<DDB2) | (0<<DDB1) | (0<<DDB0); // State: Bit3=T Bit2=0 Bit1=T Bit0=T PORTB=(0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0); // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: 16000,000 kHz // Mode: Phase correct PWM top=0xFF // OC0A output: Non-Inverted PWM // OC0B output: Non-Inverted PWM // Timer Period: 0,031875 ms // Output Pulse(s): // OC0A Period: 0,031875 ms Width: 0 us // OC0B Period: 0,031875 ms Width: 0 us TCCR0A=(1<<COM0A1) | (0<<COM0A0) | (1<<COM0B1) | (0<<COM0B0) | (0<<WGM01) | (1<<WGM00); TCCR0B=(0<<WGM02) | (0<<CS02) | (0<<CS01) | (1<<CS00); TCNT0=0x00; OCR0A=0x00; OCR0B=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: 16000,000 kHz // Mode: Ph. correct PWM top=0x00FF // OC1A output: Non-Inverted PWM // OC1B output: Disconnected // Noise Canceler: Off // Input Capture on Falling Edge // Timer Period: 0,031875 ms // Output Pulse(s): // OC1A Period: 0,031875 ms Width: 0 us // Timer1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=(1<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (1<<WGM10); TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (1<<CS10); TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer/Counter 0 Interrupt(s) initialization TIMSK0=(0<<OCIE0B) | (0<<OCIE0A) | (0<<TOIE0); // Timer/Counter 1 Interrupt(s) initialization TIMSK1=(0<<ICIE1) | (0<<OCIE1B) | (0<<OCIE1A) | (0<<TOIE1); // External Interrupt(s) initialization // INT0: Off // Interrupt on any change on pins PCINT0-7: Off // Interrupt on any change on pins PCINT8-11: Off MCUCR=(0<<ISC01) | (0<<ISC00); GIMSK=(0<<INT0) | (0<<PCIE1) | (0<<PCIE0); // USI initialization // Mode: Disabled // Clock source: Register & Counter=no clk. // USI Counter Overflow Interrupt: Off USICR=(0<<USISIE) | (0<<USIOIE) | (0<<USIWM1) | (0<<USIWM0) | (0<<USICS1) | (0<<USICS0) | (0<<USICLK) | (0<<USITC); // Analog Comparator initialization // Analog Comparator: Off // The Analog Comparator's positive input is // connected to the AIN0 pin // The Analog Comparator's negative input is // connected to the AIN1 pin ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0); ADCSRB=(0<<ACME); // Digital input buffer on AIN0: On // Digital input buffer on AIN1: On DIDR0=(0<<ADC1D) | (0<<ADC2D); // ADC initialization // ADC disabled ADCSRA=(0<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (0<<ADPS0); unsigned char VL_OCR0A = 0, VL_OCR0B = 0, VL_OCR1A = 0; OCR0A = 0; OCR0B = 0; OCR1A = 0; while(1) { _delay_ms( 100 ); VL_OCR0A = VL_OCR0A + 1; VL_OCR0B = VL_OCR0B + 1; VL_OCR1A = VL_OCR1A + 1; if( VL_OCR0A >= 250 ){ VL_OCR0A = 0; } if( VL_OCR0B >= 250 ){ VL_OCR0B = 0; } if( VL_OCR1A >= 250 ){ VL_OCR1A = 0; } OCR0A = VL_OCR0A; OCR0B = VL_OCR0B; OCR1A = VL_OCR1A; } } Т.е. если указать задержку в начале цикла, то светодиод не светится вообще.
      Если задержку убрать - светодиод немного подсвечивает всеми цветами.
      while(1) { _delay_ms( 100 ); // <--- ЗАДЕРЖКА --- VL_OCR0A = VL_OCR0A + 1; VL_OCR0B = VL_OCR0B + 1; VL_OCR1A = VL_OCR1A + 1; if( VL_OCR0A >= 250 ){ VL_OCR0A = 0; } if( VL_OCR0B >= 250 ){ VL_OCR0B = 0; } if( VL_OCR1A >= 250 ){ VL_OCR1A = 0; } OCR0A = VL_OCR0A; OCR0B = VL_OCR0B; OCR1A = VL_OCR1A; } Где я накосячил?
      З.Ы.: Замечаний по поводу оптимизации кода, излишних переменных и п.р. прошу не писать - изощряюсь как могу ибо не пойму почему не работает
    • Guest Денис
      By Guest Денис
      В общем, есть такое чудо китайской техники (фото)
      Что оно может:
      1. Заряжаться через microUSB порт
      2. Кнопка вкл/выкл, она же переключает режимы
      3. 3 режима свечения светодиода (он светит разными цветами)
      Что я хочу сделать:
      1. Пункты 1 и 2 выше
      2. Разнообразить количество режимов, переливание статичный цвет и тд...
      Вопрос: как это сделать? что купить?

      P.S. К сожалению, в гугле не нашел подробной инструкции, а я в электронике я дуб дубом


×
×
  • Create New...