collapse

* Posts Recentes

MKR Vidor4000 por josecarlos
[Ontem às 21:05]


PWM com ventoinha por edeweld
[Ontem às 20:42]


Frequência máxima de pwm com controlo de duty cycle de 0 a 100% por Njay
[Ontem às 19:59]


NiCd por NiMH? por jm_araujo
[Ontem às 11:46]


LusoRobótica - Website - Estado actual por TigPT
[19 de Maio de 2018, 22:34]


Concurso Robô Bombeiro 2018 por Tesla
[18 de Maio de 2018, 11:01]


Trafo Amplificador Behrimger ? por jm_araujo
[16 de Maio de 2018, 18:55]


Alfândega / Taxas Alfandegárias / Portes por Njay
[16 de Maio de 2018, 01:26]


Compra Colectiva à Farnell N3-2018 (Maio 2018) por Hugu
[15 de Maio de 2018, 15:34]


Robô BBC micro:bit controlado com gestos no telemóvel Android por Tayeb
[14 de Maio de 2018, 19:41]

Autor Tópico: programar c  (Lida 2277 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline dio123

  • Mini Robot
  • *
  • Mensagens: 932
programar c
« em: 25 de Abril de 2009, 18:26 »
bem tenho um problema de nao conseguir gravar com avr studio  e com o winavr.
Então tinha um software antigo do meu progamador apollo e só consigo gravar ficheiros hex. Logo como é muito dificil de criar um programa hex, queria saber como converto uma programação c para hex

desde ja agradeço

Offline TigPT

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 5.298
    • Tiago Rodrigues
Re:programar c
« Responder #1 em: 25 de Abril de 2009, 18:31 »
Bem, o hex tem que ser gerado por um compilador para um determinado chip, precisamos saber qual o microcontrolador que estás a utilizar.

Se for um PIC podes utilizar o CCS que o jagsilva aconselhou noutro post.

Offline dio123

  • Mini Robot
  • *
  • Mensagens: 932
Re:programar c
« Responder #2 em: 25 de Abril de 2009, 18:36 »
estou a usar microcontrolador at90s8515


Offline TigPT

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 5.298
    • Tiago Rodrigues
Re:programar c
« Responder #3 em: 25 de Abril de 2009, 18:40 »
nesse caso penso k o Njay será o mais adequado para te responder, vamos esperar por ele ;)

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.275
    • Tróniquices
Re:programar c
« Responder #4 em: 25 de Abril de 2009, 18:51 »
Depois de compilares, ficas com um ficheiro com a extensão ELF, imaginemos que se chama prog.elf. Aí é só dares o comando

avr-objcopy -j .text -j .data -O ihex prog.elf prog.hex

e ficas com um ficheiro prog.hex.

Então não conseguiste pôr aquilo a funcionar mas funciona com o sw mais antigo do programador?

Offline dio123

  • Mini Robot
  • *
  • Mensagens: 932
Re:programar c
« Responder #5 em: 25 de Abril de 2009, 23:31 »
Já consegui por o avr a piscar o led, mas tive de usar o programa eproms(feito por um users dum forum a 4 anos), e gravar esse hex na flash.
Quando tiver algum tempo vou ver se faço um pequeno tutorial

tenho este programa mas tem um erro só que nao sei qual, ando as voltas e nao consigo descobrir é se alguem desse uma dica agradecia

#include "avr.h"

class LedTI4s
{
public:
  /* Referência ao registrador */
  AT90S* AT90S8515;
  /* Contador para o tempo */
  unsigned char contador;

  /* Handler da interrupção 0 (Botão)*/
  void IRQ0 (void)
  {   
    if(AT90S8515->mcucr == 0x0A) {
      AT90S8515->timsk = 0x02;
      AT90S8515->mcucr = 0x0F;
    } else {
      contador = 61;
      AT90S8515->timsk = 0x00;
      AT90S8515->mcucr = 0x0A;
      AT90S8515->portb = 0xFF;
    }
  }
  /* Handler da interrupção 1 (Botão)*/
  void IRQ1 (void)
  {
    IRQ0();
  }
  /* Handler da interrupção 7 (Timer)*/
  void IRQ7 (void)
  {
    contador--;
    if(contador == 0)
      AT90S8515->portb = 0x00;//acende os leds
  }
 
  /* Inicailiza os registradores e o objeto para o registrador. */
  void inicializa(void)
  {
    AT90S8515 = reinterpret_cast<AT90S *>(0);
    AT90S8515->ddrb = 0xFF;//configura porta B como saída
    AT90S8515->ddrd = 0x00;//configura porta D como entrada
    AT90S8515->tccr0 = 0x05;//prescaler 1024
    AT90S8515->portb = 0xFF;//apaga os leds
    AT90S8515->sreg = 0x80;//habilita as interrupções
    AT90S8515->gimsk = 0xC0;//habilita as interrupções
    AT90S8515->timsk = 0x00;//desabilita timer 0
    AT90S8515->mcucr = 0x0A;
    contador = 61;
  }
};

LedTI4s led;

void __vector_1 (void)
{
  led.IRQ0();
}
 
void __vector_2 (void)
{
  led.IRQ1();
}

void __vector_7 (void)
{
  led.IRQ7();
}

int main(void)
{
  led.inicializa();
  while(1);
  return 0;
}

Offline TigPT

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 5.298
    • Tiago Rodrigues
Re:programar c
« Responder #6 em: 26 de Abril de 2009, 01:23 »
Movido para secção de AVRs

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.275
    • Tróniquices
Re:programar c
« Responder #7 em: 26 de Abril de 2009, 01:59 »
Já agora convém dizeres qual é o erro que te dá, que o pessoal não tem bolas de cristal :)

Mas esse programa não me parece para avr-gcc.

Consegues arranjar uma boa foto do lado de baixo do Apollo? Coloca no outro tópico.