roboforum.ru

Технический форум по робототехнике.

портирование кода для pic на avr

Re: портирование кода для pic на avr

Myp » 04 фев 2009, 11:20

просто даташит надо открыть и прочитать :)
там очень чотко одним предложением написано через что шьётся

Re: портирование кода для pic на avr

Myp » 04 фев 2009, 11:48

я тока понять не могу
через spi тинька программируется но spi в тиньке нету
это как?

я чото както не улавливаю, как мне spi в тиньке13 отконфигурить :(

Re: портирование кода для pic на avr

avr123.nm.ru » 04 фев 2009, 11:58

Myp писал(а):я тока понять не могу
через spi тинька программируется но spi в тиньке нету
это как?

Прямо так как в ДШ и написано - SPI это шина т.е. набор проводников, сигналов - некоторый способ последовательной передачи информации - и реальзовано это может быть и аппаратно и програмно. Так же как i2с - програмно можно на любом AVR сделать а аппаратно только в некоторых.

Ты можешь програмно сделать - посмотреть даташит или иной источник где есть диаграммы сигнала и сделать их по примеру - http://avr123.nm.ru/z12.htm

И вот пример от Гудвина для CVAVR (я не проверял) програмная последовательная передача
Ножки назначить можно те которые нужны.

Код: Выделить всёРазвернуть
  PORTB=0x00;
  DDRB=0x38;
  PORTB.3=1;   
  delay_ms(1);
  PORTB.3=0;
  delay_ms(1);

// вывод символа
void putchar( char c)
{
  unsigned char n;
  for (n=0;n<8;n++)
  {
    if (c & 1) PORTB.4=1; // сигнал - данные
    else PORTB.4=0;
    PORTB.5 =0; // сигнал SCK - clock
    delay_us(100);
    PORTB.5 =1;
    delay_us(100);
    c=c>>1;
  }
}


В проге где нужно передать символ, пишешь.

Код: Выделить всёРазвернуть
putchar(символ для передачи, переменная - число от 0 до 255);
Последний раз редактировалось avr123.nm.ru 04 фев 2009, 12:04, всего редактировалось 1 раз.

Re: портирование кода для pic на avr

zubr » 04 фев 2009, 12:44

2Мур: я бы вообще перетащил лучше на pic10f200 - ровно 6 ног в sot23-6

Re: портирование кода для pic на avr

Digit » 04 фев 2009, 14:05

Так, горячие финские парни. Валите в ЛС! :evil: Эд - стирай весь мусор.
Кто после моего сообщения продолжит на страницах форума разборки - получит предупреждение. Если это не поможет - бан на несколько дней.
Последний раз редактировалось Digit 04 фев 2009, 14:05, всего редактировалось 2 раз(а).
Причина: это сообщение не удалять - сам уберу, когда надо будет

Re: портирование кода для pic на avr

EdGull » 04 фев 2009, 14:20

ну раз надо, надо так надо... тем более что сам обещал... :)

Добавлено спустя 13 минут 25 секунд:
вроде всё почистил...

Re: портирование кода для pic на avr

zubr » 04 фев 2009, 16:29

Myp писал(а):
Код: Выделить всёРазвернуть
Marc Gazal
/*-----------------------------------------------------*/
/*           Simulateur de chip AF-Nikon
/*              par un PIC 16F690
/*
/* Fonctionnement :
/*  - Le boitier passe un signal RW1 de 1 vers 0
/*  - Il attend puis le repasse а 1
/*  - Il regarde ensuite l'йtat de ce signal.
/*     - Si RW1 = 1, Rien il retente l'opйration plus tard
/*     - Si RW1 = 0, C'est que l'objectif est Ok pour recevoir
/*        - Il envoie le caractere 0x44
/*        - L'objectif, lorsqu'il a reзu le 0x44 fait remonter le RW1
/*        - L'objectif envoie ensuite un а un les 26 caracteres comme suit
/*           Passage du RW1 а 0,
/*            envoie du caractere,
/*             Passage du RW1 а 1.
/*
/* C'est le boitier qui genere le signal d'horloge.
/*
/* Cablage :

          ----------
                     VDD !1     20! VSS
    RA5/T1CKI/OSC1/CLKIN !2     19! RA0/AN0/C1IN+/ICSPDAT/ULPWU
RA4/AN3/T1G/OSC2/CLKOUT !3     18! RA1/AN1/C12IN0-/VREF/ICSPCLK
            RA3/MCLR/VPP !4     17! RA2/AN2/T0CKI/INT/C1OUT
            RC5/CCP1/P1A !5     16! RC0/AN4/C2IN+
           RC4/C2OUT/P1B !6     15! RC1/AN5/C12IN1-
     RC3/AN7/C12IN3-/P1C !7     14! RC2/AN6/C12IN2-/P1D
              RC6/AN8/SS !8     13! RB4/AN10/SDI/SDA
             RC7/AN9/SDO !9     12! RB5/AN11/RX/DT
               RB7/TX/CK !10    11! RB6/SCK/SCL
                         ----------

RW1 : Sur PIN 17 en lecture pour intercepter le front bas en interuption
      Sur PIN 16 en ecriture pour generer le signal

CLK : Sur PIN 11

SD  : Sur PIN 13 Pour recevoir
       Sur PIN  9 Pour Transmettre

*/

#include <pic.h>
#include <htc.h>

// Le premier proto utilisait un transistor NPN en colecteur ouvert pour generer RW1
// d'ou necessitйe d'inverser le signal.
// le proto actuel ne l'utilise plus
//#define avecnpn

// definition de quelques LED cablйes sur le proto pour tests.
#define LED1  RC5
#define LED2  RA4
#define LED3  RA5

// constantes utilisйe par le soft pour allumer ou eteindre
// les leds
#define LEDON  0
#define LEDOFF 1

// Un jour, le soft sera capable de simuler un type d'objo
// de faзon dynamique en lisant les entrйes libres.
#define  SW1   RC4
#define  SW2   RC1
#define  SW3   RC3
#define  SW4   RC2
#define  SW5   RC6
#define  SW6   RB5
#define  SW7   RB7

// Le signal RW1 du boitier
#define  RWIN   RA2
#define  RWOUT   RC0

// constantes que l'on enverra au boitier pour lui indiquer
// l'ouverture de l'objo que l'on simule.
#define lensaperture_f10 1
#define lensaperture_f11 2
#define lensaperture_f12 8
#define lensaperture_f13 10
#define lensaperture_f16 16
#define lensaperture_f17 18
#define lensaperture_f18 20
#define lensaperture_f20 25
#define lensaperture_f24 30
#define lensaperture_f25 32
#define lensaperture_f27 34
#define lensaperture_f28 36
#define lensaperture_f30 38
#define lensaperture_f32 40
#define lensaperture_f33 42
#define lensaperture_f35 44
#define lensaperture_f38 46
#define lensaperture_f40 48
#define lensaperture_f45 52
#define lensaperture_f48 54
#define lensaperture_f50 56
#define lensaperture_f53 58
#define lensaperture_f56 60

// Constante а modifier en fonction de l'ouverture max de l'objo а simuler
// pour l'instant, la focale simulйe est fixe а 50 mm
#define lensaperture lensaperture_f18


// quelques variables
bit enattente;
bit waitforstart;
unsigned char i;
unsigned char inbyte;
unsigned char numbytetosend,bytetosend;

// definition de la tramme а envoyer
// 26 caracteres
#define nbbytetosend 26
// La table en ROM
unsigned char tblref[nbbytetosend] = {37,20,80,0,96,248,17,12,6,0,26,20,0,32,0,0,80,20,15,88,80,80,20,20,5,20 };

// copie de la table en ROM vers RAM. C'est celle ci qui sera envoyйe
// apres avoir йtй modifiйe en focntion des caracteristique de l'objo
unsigned char tblout[nbbytetosend];

// les "Fuses" du PIC

__CONFIG (0x33D4);

// Recopie de la table ROM vers la RAM et insertion des valeurs de l'objectif а simuler.
// Ouverture courante en : 1 ; 17 ; 25
// ouverture mini en 22
// ouverture maxi en 23
void filltblout (void)
{
unsigned char i;
for (i=0 ; i< nbbytetosend ; i++ )  {
  tblout[i]  = tblref[i];
}
  tblout[1]  = lensaperture;
  tblout[17] = lensaperture;
  tblout[25] = lensaperture;
}


// Bon, la, une fonction qui renverse un octet.
// Histoire de MSB qui part premier.
// je sais : Y'avait juste а reverser les octets de la table
// pour eviter cette heresie.
unsigned char inverseoctet ( unsigned char valeur )
{
unsigned char result;
result = 0;
if ( valeur & 128 ) result = result | 1;
if ( valeur & 64  ) result = result | 2;
if ( valeur & 32  ) result = result | 4;
if ( valeur & 16  ) result = result | 8;
if ( valeur & 8   ) result = result | 16;
if ( valeur & 4   ) result = result | 32;
if ( valeur & 2   ) result = result | 64;
if ( valeur & 1   ) result = result | 128;
return (result);
}


// Configuer la transmission SPI
void initreception (void)
{
  CKP = 1;    // Evenements sur front montant de CLK
  CKE = 0;    //
  SSPEN  = 0;
  SSPCON = 0b00010101;  // Transmission en SPI,
  SSPEN  = 1;
  #ifdef avecnpn
    TRISC  = 0b11011110; // SDO en entree
  #else
    TRISC  = 0b11011111; // SDO en entree, RWout en entrйe
  #endif
}

// quelques fonction gйnйrales
void enable_INT(void)
{
INTE = 1;
INTF = 0;
}

void disable_INT(void)
{
INTE = 0;
INTF = 0;
}

void enable_T0 (void)
{
T0IE = 1;
T0IF = 0;
TMR0 = 0;
}

void disable_T0 (void)
{
T0IE = 0;
T0IF = 0;
TMR0 = 0;
}

void enable_interrupts(void)
{
GIE = 1;
}

void disable_interrupts(void)
{
GIE = 0;
}


// Se mettre en etat d'attente du front descenfdant du RW1
void do_idle(void)
{
enattente = 1;
waitforstart = 0;
initreception();
disable_T0();     // Pas besoin de timer;
#ifdef avecnpn
   RWOUT = 0;      // Ligne RW = 1
#else
   TRISC = TRISC | 0b00000001; // RWout en entrйe
   RWOUT = 1;      // Ligne RW = 1
#endif
SSPIE = 0;     // pas d'irq en reception
enable_INT();  // Irq sur descente du RW
}


void interrupt tc_int(void)
{
// recu int du timer0 : c'est grave (timeout)
// On se remet en attente
  if (T0IE && T0IF) {
   T0IF=0;
   LED1 = LEDOFF;
   LED2 = LEDOFF;
   LED3 = LEDOFF;
   if ((enattente==0) && (waitforstart)) {
     #ifdef avecnpn
       RWOUT = 1; // pour indiquer au boitier que l'on a un truc a lui dire
     #else
       TRISC = TRISC & 0b11111110;
       RWOUT = 0; // pour indiquer au boitier que l'on a un truc a lui dire
     #endif
     waitforstart = 0;
   }
   else do_idle();
  }

// recu front descendant sur RW : le boitier veut
// savoir а qui il a а faire
if ( INTE && INTF  ) {
  INTF  = 0;
  #ifdef avecnpn
    RWOUT = 1 ;   // on met la ligne rw а 0
  #else
    TRISC = TRISC & 0b11111110;
    RWOUT = 0 ;   // on met la ligne rw а 0

  #endif

  inbyte = SSPBUF;

  INTE  = 0;    //
  SSPIF = 0;    // on autorise les irqs sur port sйrie;
  SSPIE = 1;

  LED2 = LEDON;
  enable_T0();
}

// nous venons de recevoir un caractere sur le port sйrie
if (SSPIF && SSPIE )
{
  SSPIF = 0;
  TMR0  = 0;
  inbyte = SSPBUF;
  if ( enattente==1 ) {
    if (inbyte == 0x44) {  //caractere d'initialisation venant du boitier

      numbytetosend = 0;
      bytetosend = inverseoctet(tblout[numbytetosend]); // preparation du premier caractere а envoyer
      SSPBUF = bytetosend; // on envoie le caractere

      // passer en transmission
      enattente = 0;
      INTE = 0;  // Pas d'irq sur front du RW
      INTF = 0;  // par sйcuritй

      TRISC = TRISC & 0b01111111;

      LED1 = LEDON;
      #ifdef avecnpn
       RWOUT = 0; // Liberation du RW
      #else
       RWOUT = 1; // Liberation du RW
       TRISC = TRISC | 0b00000001;
      #endif
      enable_T0(); // initialisation du timeout
      TMR0 = 252;
      waitforstart = 1;
    }
    else do_idle();
  }
  else {
   // Recu interruption alors que l'on est en emision
   LED3 = LEDON;
   #ifdef avecnpn
     RWOUT=0; // RW au niveau 1
   #else
     TRISC = TRISC | 0b00000001;
     RWOUT=1; // RW au niveau 1
    #endif
   numbytetosend++;
   if (numbytetosend<nbbytetosend)
   {
     bytetosend = inverseoctet(tblout[numbytetosend]); // caractere а envoyer
     SSPBUF = bytetosend; // on envoie le caractere
     waitforstart = 1;
     enable_T0(); // initialisation du timeout
     TMR0 = 252;
   }
   else do_idle(); // on a plus rien а transmettre;
  }
}
}





void main (void)
{
filltblout();
// Pas d'entrйe analogique
ANSEL = 0;
ANSELH = 0;

// Configuration des Entrйes/Sorties
TRISA = 0x0C;
TRISB = 0b11111111;  // 0xFF;
#ifdef avecnpn
   TRISC = 0b11011110;  // 5E
#else
   TRISC = 0b11011111;  // 5E
#endif

// Initialisation du Timer0 qui servira de timeout
// OPTION_REG :
// Bit 7 = 1 -- Pull-up disabled
// Bit 6 = 0 -- Interruption sur front descendant de Int
// Bit 5 = 0 -- Timer sur clock Interne
// Bit 4 = 0 -- N/A
// Bit 3 = 0 -- Prescaler sur timer 0
// Bits 2-0 = 011 -- Prescaler а 16
// Soit un timer egal а 16*255us = 4ms
OPTION = 0b00000011;  //Bit7 = 1 pull-ups disabled

WPUA  = 0;  // Pas de pull-ups sur port A
WPUB  = 0;  // Pas de pull-ups sur port B
WPUA2 = 1;  // Pull-up sur RA2 ( RWIN )

enable_interrupts();
PEIE  = 1;  // autoriser l'autorisation du SPI;

LED1 = LEDOFF;
LED2 = LEDOFF;
LED3 = LEDOFF;

do_idle();   // se mettre en position d'attente du boitier
while (1)
{


}
}


надеюсь автор не будет против что я его код сдал )
короче автор этого дела Marc Gazal из франции


Давай я ее тебе на pic10 перенесу?
прошить сможешь?

Re: портирование кода для pic на avr

Myp » 04 фев 2009, 17:44

да, было бы здорово
прошить смогу если будет что

вроде как нашёл где есть в наличии

Re: портирование кода для pic на avr

avr123.nm.ru » 04 фев 2009, 17:57

А что это за устройство ? И где первоистоник почитать ?

Надо бы в PROTEUS симульнуть.

Re: портирование кода для pic на avr

Myp » 04 фев 2009, 18:36

великая идея:

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

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

для цифровых камер это не критично, можно сделать тестовый снимок и подогнать параметры чтоб было красиво. хотя конечно теряется удобство автоматики и скорость съёмки.
для плёночных же камер(а у меня такая, nikon F65) это смерти подобно
определять экспозицию надо на глазок, либо по экспонометру, выбирая подходящую экспопару.
так же как снимали дедушки...

вот собственно этот девайс и есть та злополучная микросхема из объектива
товарищи из франции с помощью осциллографа вскрыли протокол обмена и сделали прототип

идея в том чтобы зашить в чип набор параметров разных советских объективов имеющихся в наличии
установить чип в камеру
и снимать на плёнку в своё удовольствие пользуясь автоматическим замером
при таком способе погрешность экспозиции будет некритична

выше приведён код который написан и опробован Марком Газалом
http://forum.nikonpassion.com/viewtopic.php?id=1640&p=1

Re: портирование кода для pic на avr

=DeaD= » 04 фев 2009, 19:07

Myp писал(а):установить чип в камеру

Прощай гарантия? Или угадай, не сломают ли тебе при этом камеру и оплатят ли её, если сломают?

Re: портирование кода для pic на avr

Myp » 04 фев 2009, 19:17

с чего бы это вдруг я сам себе камеру сломаю?
чо я дурак чтоли? :fool:

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

а гарантия...
она хз скока лет назад кончилась :D

Re: портирование кода для pic на avr

zubr » 04 фев 2009, 19:21

Myp писал(а):да, было бы здорово
прошить смогу если будет что

вроде как нашёл где есть в наличии

Ок.
Тогда за вами страничку где нить на вики о том как это применять.
И согласие автора на использование/публикацию его кода.

Re: портирование кода для pic на avr

=DeaD= » 04 фев 2009, 19:23

Myp писал(а):во вторых всегда остаётся вариант подключить этот самодельный чип туда куда надо
в байонет объектива
где он и должен быть по идее

Есть такая вещь как одуванчик - в курсе? http://www.filmprocess.ru/oduvanchik/index.html

И еще - потом оффтоп скинешь?

Re: портирование кода для pic на avr

Myp » 04 фев 2009, 20:00

я в курсе про одуванчик
во первых вобще не из той оперы
во вторых он для системы CANON

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

страничка будет
всё равно буду статью писать в клуб никон чтоб похвастаться, в ЖЖ сообщество тоже чтоб похвастаться
и французам в благодарность за помощь тоже напишу :) мне знакомая грамотно переведёт на французский)


пока что вот что сделал
отковырял из старого китового объектива микросхему и контакты и приделал её в советкий МС Гелиос-81Н купленный за 500 рублей
свинтил кольцо байонетное с гелиоса и приделал туда контактную площадку кита
DSC_3885.jpg

вот тут видна сама плата из объектива
она большая да ещё и с драйвером ультразвукового мотора.
DSC_3884.jpg


а вот сама фотка сделанная этим мутантом
экспозиция вполне достойная
DSC_3887.jpg

любопытные могут посмотреть экзиф :)
там информация вся присутствует из чипа китового объектива


Rambler\'s Top100 Mail.ru counter