Pages: 1 2 [3]   Go Down
Author Topic: RS485 per programmare ATmega  (Read 2508 times)
0 Members and 1 Guest are viewing this topic.
Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 336
Posts: 23146
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok linux posso prenderlo su un altro pc di cui non posso disporre subito..

Cioè devo semplicemente salvarmi l'optiboot.h originale, posizionarmi sulla cartella che contiene questo file che stiamo modificando e lanciare il comando?
Per scrupolo, copia tutta la cartella /optiboot, così puoi rimettere tutto a posto e ripristinare l'Optiboot originale.

Quote
Poi suppongo che debba fare un burn bootloader with arduino as isp?
Sì, devi programmare l'Atmega tramite Arduino. Però devi crearti prima una board virtuale, come descritto nella guida di Menniti.
Logged


Capo d'Orlando
Offline Offline
God Member
*****
Karma: 2
Posts: 725
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Uhmm nell‘istruzione non mi riconosce atmega328.. io ho fatto una copia della csrtella optiboot, modificato il file optiboot.c, e posizionatomi col terminale sulla cartella optiboot.
Ma quest‘operazione esattamente a cosa serve? Sarebbe una compulazione dei codici? Se lo faccio sul mio pc linux, posso poi semplicemente copiare su windowsla cartella optiboot ricavata e quindi fare il burning del bootloader?
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 336
Posts: 23146
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Uhmm nell‘istruzione non mi riconosce atmega328.. io ho fatto una copia della csrtella optiboot, modificato il file optiboot.c, e posizionatomi col terminale sulla cartella optiboot.
deve funzionare con "make atmega328". Prova sennò dando un "make" generico e guarda se compila per tutti i micro.

Quote
Ma quest‘operazione esattamente a cosa serve? Sarebbe una compulazione dei codici? Se lo faccio sul mio pc linux, posso poi semplicemente copiare su windowsla cartella optiboot ricavata e quindi fare il burning del bootloader?
Serve a compilare il bootloader, cioè a creare l'eseguibile partendo dai sorgenti modificati che hai scritto tu.
Se compili su Linux puoi semplicemente prendere il file optiboot_atmega328.hex, è quello che serve, e copiarlo sulla tua installazione Windows (salva quello originale, per scrupolo).
Logged


Capo d'Orlando
Offline Offline
God Member
*****
Karma: 2
Posts: 725
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ho letto che su windows c'è il file omake.bat all'interno della cartella optiboot quindi si può fare, ma ho riscontrato un problema dovuto a qualche errore di sintassi all'interno di optiboot.c, allego anche lo screen.

Tolgo un po' di roba a caso altrimenti non rientro con il numero di caratteri, le modifiche sono in maiuscolo:
Code:
int main(void) {

  // Adaboot no-wait mod
  ch = MCUSR;
  MCUSR = 0;
  if (!(ch & _BV(EXTRF))) appStart();
[b]DDRD |=B0000100;  [/b]
#if LED_START_FLASHES > 0
  // Set up Timer 1 for timeout counter
  TCCR1B = _BV(CS12) | _BV(CS10); // div 1024
#endif

}

void putch(char ch) {
[b]PORTD |=B0000100;[/b]
#ifndef SOFT_UART
  while (!(UCSR0A & _BV(UDRE0)));
  UDR0 = ch;
#else
  __asm__ __volatile__ (
    "   com %[ch]\n" // ones complement, carry set
    "   sec\n"
    "1: brcc 2f\n"
    "   cbi %[uartPort],%[uartBit]\n"
    "   rjmp 3f\n"
    "2: sbi %[uartPort],%[uartBit]\n"
    "   nop\n"
    "3: rcall uartDelay\n"
    "   rcall uartDelay\n"
    "   lsr %[ch]\n"
    "   dec %[bitcnt]\n"
    "   brne 1b\n"
    :
    :
      [bitcnt] "d" (10),
      [ch] "r" (ch),
      [uartPort] "I" (_SFR_IO_ADDR(UART_PORT)),
      [uartBit] "I" (UART_TX_BIT)
    :
      "r25"
  );
#endif
[b]PORTD &=B1111011;[/b]
}

uint8_t getch(void) {
[b] PORTD &=B1111011;[/b]
  uint8_t ch;

#ifdef LED_DATA_FLASH
#ifdef __AVR_ATmega8__
  LED_PORT ^= _BV(LED);
#else
  LED_PIN |= _BV(LED);
#endif
#endif

#ifdef SOFT_UART
  __asm__ __volatile__ (
    "1: sbic  %[uartPin],%[uartBit]\n"  // Wait for start edge
    "   rjmp  1b\n"
    "   rcall uartDelay\n"          // Get to middle of start bit
    "2: rcall uartDelay\n"              // Wait 1 bit period
    "   rcall uartDelay\n"              // Wait 1 bit period
    "   clc\n"
    "   sbic  %[uartPin],%[uartBit]\n"
    "   sec\n"
    "   dec   %[bitCnt]\n"
    "   breq  3f\n"
    "   ror   %[ch]\n"
    "   rjmp  2b\n"
    "3:\n"
    :
      [ch] "=r" (ch)
    :
      [bitCnt] "d" (9),
      [uartPin] "I" (_SFR_IO_ADDR(UART_PIN)),
      [uartBit] "I" (UART_RX_BIT)
    :
      "r25"
);
#else
  while(!(UCSR0A & _BV(RXC0)))
    ;
  if (!(UCSR0A & _BV(FE0))) {
      /*
       * A Framing Error indicates (probably) that something is talking
       * to us at the wrong bit rate.  Assume that this is because it
       * expects to be talking to the application, and DON'T reset the
       * watchdog.  This should cause the bootloader to abort and run
       * the application "soon", if it keeps happening.  (Note that we
       * don't care that an invalid char is returned...)
       */
    watchdogReset();
  }
 
 


Secondo problema: Il mio convertitore non ha un pinout del reset, quindi non posso mandarlo allo standalone.. mi sa che stiamo facendo un lavoro inutile!! http://www.sparkfun.com/datasheets/BreakoutBoards/USB-to-RS485-Breakout-v11.pdf


* Immagineazsd.bmp (657.62 KB, 667x336 - viewed 10 times.)
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 336
Posts: 23146
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

1° problema:
per la compilazione su Windows non so aiutarti. Al max posso compilarti il file su Linux, se mi passi il sorgente.

2° problema:
devi replicare lo schema del reset che era usato sull'Arduino 2009, che usava anch'essa l'FT232, dove erano usate le linee DTR/RTS:
http://arduino.cc/en/uploads/Main/arduino-duemilanove-schematic.pdf
Logged


Capo d'Orlando
Offline Offline
God Member
*****
Karma: 2
Posts: 725
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

No la compilazione la fa, il problema sta appunto nel sorgente in cui avrò sbagliato qualcosa!  smiley-sweat

2- Il problema sta nel fatto che sul convertitore non ho un "buco" che vada al reset o agli altri pin del ft232! (non si chiama pinout?)
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 336
Posts: 23146
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Il grassetto non funziona all'interno del tag code.
A me pare che tu stia usando un valore a 7 bit, non ad 8  smiley-wink
Logged


Capo d'Orlando
Offline Offline
God Member
*****
Karma: 2
Posts: 725
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

 smiley-sweat

Direi che ora rimanga il problema del reset:
O compro un altro convertitore che abbia un pinout sul reset (non fatemelo fare, vi prego), oppure..?
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 336
Posts: 23146
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Il tuo è un convertitore USB/RS485, a te serviva questo prodotto:
https://www.sparkfun.com/products/718

che è un convertitore USB/seriale e che, a differenza della schedina che hai tu, tira fuori tutte le linee dall'FT232, comprese RTS e DTR.
Logged


Pages: 1 2 [3]   Go Up
Jump to: