Перейти к содержанию
    

Halfback

Участник
  • Постов

    424
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные Halfback


  1. помогите плиз мне с этой PCA9554А. Физический адрес: 0. Хочу чтобы на выходе засветило 0хАА. В CAVR пишу так:

    while (1)
          {
          // Place your code here
          i2c_start(); 
          i2c_write(0x70); // 01110000
          i2c_write(0x01); // Output Register     
          i2c_write(0xAA); // Output State
          i2c_stop(); 
             
          delay_ms(500);
          
          };

     

    На железе не работает. Ладно. Пошел мучать протеус: там тоже самое. :(

  2. Да разводить надо, как SMD, только лучше заранее подумать, как выпаивать

    именно этим вопросом я и озадачился перед разводкой платы. Если применять поверхностный монтах - то выпаивать нужно уже с отсосом олова.

    А такой вариант мне в общем-то не айс. Поэтому и интересуюсь здесь - мало ли кто кроватку под RFM12BP знает.

  3. Решил всё-таки делать на полевиках. Нашел расширитель портов на интерфейсе I2C. Логика 3,3В. Нужен подходящий транзистор у которого при напряжения затвор-исток 3,3В ток стока был бы не менее 300мА. BSS295 по характеристикам отлично подходит но могу не достать. Есть еще альтернативы?

    Сам пока что нашел IRF7301 - 2-N-канальных в небольшом корпусе.

  4. rezident

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

     

    Если источники питания переключаются при помощи реле (десятки миллисекунд) - то без кондесаторов большой ёмкости не обойтись. Либо как написали выше - по диодному "или" подключать 2 источника. Если источники импульсные то ООС рулит ;)

  5. Вы бы для начала посмотрели на габариты современного радиального/аксиального конденсатора скажем на 6-10 Вольт и 10000мкФ. Взгляните на свою материнскую плату - там для питания ядра процессора применена многофазная система питания (2-3 фазы и больше у современных плат) и посмотрите ради интереса какие там конденсаторы для предотвращения скачков напряжения - а ТОК там куда поболее 2,5А.

  6. Как мне кажется маловато информации для размышления..

    Как вариант влоб - может вставить емкость на несколько тысяч микрофарад??? ;) Токи небольшие так что должно помочь!

  7. Вот такой красавчеГ. Так вот вопрос - если кто сталкивался то как его грамотно монтировать на печать? Пока додумался на печати сверлить отверстия, в них штыри и на эти штыри монтировать этот девайс. Но может есть спец. кроватка или еще что? Мой способ немного геморный и думаю есть уже готовые решения, но не могу их найти...

  8. пока что самый интересный вариант от Сергей Борщ. Но в этом случае нужно либо побольше каналов либо больше тока в нагрузку. у меня такой 1 фтучка стОит около 250р - дороговато однако... Но пока что самый дешёвый вариант это регистр сдвига и полевики. Вообще до 0,5А я тоже нашел в серии ULN и ценник вкусный - до 20руб, но они все параллельные...

  9. Вобщем нужно что-то вреде вот такого Там же есть pdf. Но походу в 5891 500мА - максимальный суммарный ток на все 8 каналов, а мне надо до 1А на каждый канал. Вобщем пока не найти. Может кто знает? а то не очень хочется вместо одной микросхемы городить регистр сдвига с защелкой, драйвер и полевики....

  10. Pasha

    я внимательно читаю :)

    тупо тока что скопировал в spi.h код (закомментировав свой)

    #include <90usb162.h>
    #ifndef types_h
    #define types_h        
    void SPI_Init();
    interrupt [SPI_STC] void spi_isr(void); // Обработчик прерывания по приходу байта
    void SPI_Tx_2BITE(uint16 data);
    
    #endif

     

    не фурычит. Причем #endif в КОНЦЕ синтаксис не засвечивает почему-то (может глюк? :wacko: ).

     

    aaarrr

    Спасибо!!! Теперь не выдаёт предупреждений!!! Действительно в types.h прописать надо было!

  11. #pragma once - такую директиву по моим данным CAVR не поддерживает.

     

    в spi.h для примера добавил как подсказали в вот что получилось

    #include <90usb162.h>
    #ifndef types_h
    #define types_h
    #endif
    
            
    void SPI_Init();
    interrupt [SPI_STC] void spi_isr(void); // Обработчик прерывания по приходу байта
    void SPI_Tx_2BITE(uint16 data);

    и в итоге types.h не инклудился, т.к. компилятор эррорит что не понимат uint16.

     

    #endif в конец заголовочного файла не поставить - сразу ошибка.

     

    Какие будут еще соображения?

  12. Смысл в том что в проекте создаю заголовочный файл types.h с содержимым:

    typedef unsigned char   uint8;
    typedef unsigned short int uint16;
    typedef unsigned long   uint32;

     

    Дальше всё делаю как полагается: создаю , например spi.с и для него spi.h в котором перечисляю прототипы:

    #include <90usb162.h> 
    #include <types.h>
    
    void SPI_Init();
    void SPI_Tx_2BITE(uint16 data);
    interrupt [SPI_STC] void spi_isr(void);

     

    В spi.c начинаю с

    #include "spi.h"
    
    void SPI_Init() { // Функция инициализации SPI
            //........
            };
    
            
    void SPI_Tx_2BITE(uint16 data) {
            //........
            };
    
    interrupt [SPI_STC] void spi_isr(void) {
    
                   };

     

    Дык посл компиляции проекта выдаются предупреждения

    Warning: F:\...\types.h(2), included from: spi.h: typedef name has already been declared with the same type
    Warning: F:\...\types.h(4), included from: spi.h: typedef name has already been declared with the same type
    Warning: F:\...\types.h(6), included from: spi.h: typedef name has already been declared with the same type

     

    Причём показывает на types.h с его тремя typedef-ами. Почему так - вроде понятно. Но разве компилятор настолько не умный чтобы не хавать идентичный typedef ??? Или может я что-то не так делаю?

    Если кому не лень разьясните пожалуйста!!!

     

    До этого момента делать небольшие проекты в кейле но там таких глупостей небыло!!!

  13. Из двух запоротых "хитрым" фьюзом один МЦУ успешно восстановил - второй нет. Согласно инфе в АВР-Студии надо подключить внешний тактовый генератор (что я и сделал). После подключения стала считываться сигнатура и фьюзы. Но вот фьюзы не писались (в частности хотел перейти на внутренний осциллятор). Там же в доке написано - для того чтобы фьзы прошить надо сделать Erase а потом сразу программировать конфигурацию фьзов. Согласно даташиту - всё получилось. Второй МЦУ залочился по всей видимости из-за друго "злого" фьюза. Из-за какого- пока не помню. Там же в даташите написано что поможет HP параллельное программироване, но вот что:

     

    В режиме HV/PP пробовали?

    ИМХО проще выкинуть МЦУ чем туеву тучу проводов паять делая волосатый макет ради спасения ОДНОГО тела. Серьезно - прикинул потраченное время на полтора десятка проводов-перемычек и решил отказаться от затеи.

     

    Вобщем век живи - век учись. Всем спасибо!!! Я не прощаюсь ;)

  14. В Мегу88 (установленную на Драгоне) записал при помощи AVRStudio4 фьюзик, чтобы МЦУ работал от внешнего тактового генератора - и теперь от МЦУ ни ответа ни привета - смотрел осциллографом когда слал запросы по ISP что отвечает МЦУ - на экране полный штиль. До этого злого фьюза было всё окей. Кварц. генератор не подсоединен. Проц на помойку или что-то можно еще сделать? Прошу помощи...

  15. если delay_ms - это функция компилятора - то скорее всего вы декларируете ему не ту тактовую.

    декларирую точно ТУ тактовую - сделал даже отдельный проект для проверки. Остаётся только "крошить батон" на CAVR.

  16. __delay_cycles(сколько тактов) в IAR'е решат ваши проблемы ;)

    а в CAVR что решит проблемы?

    использовал ф-цию delay_ms(10) дык вместо формирования меандра с Ти=10мс почему то Ти=2,5мс, т.е. приблизительно в 4 раза быстрее. Кварц. генератор = 2Мгц, МЦУ = Мега88.

    ЧТо посоветуете? Писать новую функцию, запихивать в нее nop-ы путём подбора с осциллографом? Задача выдавать импульсы с погрешностью хотя бы 1мс - и с delay_ms такой облом. При помощи счетчиков не хотелось бы заморачиваться.

  17. ТОже приобрёл сей гаджет. Доработку по питанию еще пока не делал. Дело вот в чем - купил к нему еще МЦУ Мега88 и воткнут ее в сокет где как-раз 28 отверстий. Вопрос такой - как теперь мою мегу прошить ибо я прозвонил ISP МЦУ и соотв. штыри на плате - не прозваниваются ??? Паяльником проводами подводить к МЦУ ISP и питание?

  18. rvk Причем тут UART? речь об SPI...

     

    rezident На счет сдвига - согласен, операция не к чему...

     

    По вопросу - как я понял если я взвожу SPE то флаг SPIF должен сам устанавливать? Без взвода SPE аппаратная часть МЦУ сама выставляет нужные флаги, так?

  19. Только начинаю нормально осваивать AVR и столкнулся со следующей проблемой.

    Задача такая - во время посылки пакета из 8 бит формировать на каком-либо пине импульс (нулевой или +5В - не столь важно) на время формирования этого байта. Делаю а CAVR. Микрик - Мега88

    Вот что получилось:

    void main(void)
    {
    ...
    SPCR=0x52;
    SPSR=0x00;
    
    // Clear the SPI interrupt flag
    #asm
        in   r30,spsr
        in   r30,spdr
    #endasm
    
    // Global enable interrupts
    #asm("sei")
    
    while (1)
          {
          // Place your code here
          
          PORTC.0 &= 0;
          PORTD = SPSR;
          SPDR = 0x15;
          
          while(!((SPSR & 0x80) >> 7)); // Следим за SPIF
          PORTC.0 |= 1;
          delay_us(200);
          };
    };

     

    при этом коде всё нормально работает. Но когда в визарде проекта CAVR в опциях МЦУ SPI ставлю галочку Enable Interrupt то регистр SPCR приобретает значение 0xD2, т.е. "1" записалась в разряд SPE. При таком раскладе появляется ф-ция обработки прерывания interrupt [sPI_STC] void spi_isr(void).

    Но в итоге код не работает. Ес-но я открыл литературу и там написано про SPE - что она активизирует SPI, а SPIF мол является флагом прерываний от SPI и флаг устанавливатеся когда произошла передача пакета. Но как показывает отладка если в SPCR записать 0xD2 то из цикла

    while(!((SPSR & 0x80) >> 7)); // Следим за SPIF

    программа никогда не выходит.

    Можно ли мне разжевать почему так происходит? И как сделать так чтобы программа выходила из while(!((SPSR & 0x80) >> 7)); ???

    Заранее признателен!

  20. В АРЕС сделана установка компонентов и наложен нетлист. Разводить планируется в ПиКад 2006. Собственно как *.LYT АРЕСа переконвертировать в *.PCB Пикада.

    НетЛист из Протеуса можно сделать в Tango, который понимает ПиКад!!!

     

    Вопрос в догонку - Протеусовские библиотеки в Пикадовские можно как-нибудь сконвертировать?

     

    Пытался экспортом Гербера из протеуса в CAMCAD PCB Translator 3.9.5 - но получается как то криво + не не дает экспортировать - пишет что мол это можно делать для лицензионных модулей (в списке лиц. модулей на экспорт действительно ничего нет)!!!

×
×
  • Создать...