【问题标题】:Uploading the .hex file from ArduinoIDe with a raspberry pi to an attiny85使用树莓派将 .hex 文件从 ArduinoIDe 上传到 attiny85
【发布时间】:2016-11-12 12:40:44
【问题描述】:

我,我正在为 attiny85 编程。首先,我用我的树莓派做了这件事,可以制作一个打开/关闭连接到我的 attiny85 的 LED 的程序。但是网上只有一个 fex 教程可以用 raspberry pi 编程服装,但是 Arduino 有很多。所以我决定使用 arduino ide,然后获取 .hex 文件并用我的树莓派将其上传到服装上。 (我没有arduino板)。更多的 arduino ide 有许多让你的生活变得简单的图书馆。但是当我上传它时一切正常,但程序似乎无法正常工作。我真的不知道是否可以使用 arduino 创建 .hex 文件并使用 Raspberry pi 推送。 Ps:对不起英语不是我的母语 这是我用覆盆子制作的第一个程序,谁可以工作:

#define F_CPU 1000000L
#include <avr/io.h>
#include <util/delay.h>
int main(void)
 {

    PORTB = 0xFF;   // LED's are off

  for (;;) {

     DDRB = 1<<DDB4 | 1<<DDB1 | 1<<DDB0 | 1<<DDB3;
    //PORTB ^= 0xFF;   // invert all the pins
     _delay_ms(1000); // wait some time
     DDRB = 0<<DDB4 | 0<<DDB1 | 0<<DDB0 | 0<<DDB3;
     _delay_ms(1000); // wait some time

   }
   return 0;
}

然后我用 arduino 制作的程序(我知道它只应该打开 2 个 LED,但没有一个):

void setup() {

 pinMode(1, OUTPUT);
 pinMode(2, OUTPUT);

}


void loop() {
  digitalWrite(1, HIGH);
  digitalWrite(2, HIGH);
  delay(1000);              // wait for a second
  digitalWrite(1, LOW);
  digitalWrite(2, LOW);  // turn the LED off by making the voltage LOW
  delay(1000);              // wait for a second
}

为了推送它,我使用这个命令(对于两个程序,但对于第一个程序,我先编译它以生成.hex):

sudo gpio -g mode 22 out
sudo gpio -g write 22 0
sudo /usr/local/bin/avrdude -p t85 -P /dev/spidev0.0 -c linuxspi -b 10000 -U flash:w:blinky.hex

这正常吗?这是代码问题还是我无法尝试? 我真的很想使用 arduino IDE,因为我希望我的 attiny/rasbperry 通过串行 gpio 进行通信

【问题讨论】:

  • 我认为10000的波特率不正确。尝试典型的波特率,例如 9600 或 115200。
  • 我尝试了第一个代码,它也可以工作,但对于 IDE Arduino 代码,我不工作:/

标签: c arduino raspberry-pi hex avr


【解决方案1】:

好的,它的工作! :D 事实上,为了编译/推送blinky.c,我使用了一个makefile(我在tuto上找到了它)。 所以现在我只使用 .hex 并使用“make install”,就像我使用第一个闪烁但没有编译,因为我得到 .hex 而不是 .c 所以这里是makefile :)

MCU=attiny85
AVRDUDEMCU=t85
CC=/usr/bin/avr-gcc
CFLAGS=-g -Os -Wall -mcall-prologues -mmcu=$(MCU)
OBJ2HEX=/usr/bin/avr-objcopy
AVRDUDE=/usr/local/bin/avrdude
TARGET=arduiblinky
# target = name of your file you want upload on the attiny

all : 
# no need this part if you have the .hex :D
    #$(CC) $(CFLAGS) $(TARGET).c -o $(TARGET)
    #$(OBJ2HEX) -R .eeprom -O ihex $(TARGET) $(TARGET).hex
    #rm -f $(TARGET)

install : all
    sudo gpio -g mode 22 out
    sudo gpio -g write 22 0
    sudo $(AVRDUDE) -p $(AVRDUDEMCU) -P /dev/spidev0.0 -c linuxspi -b 9600 - U flash:w:$(TARGET).hex
    sudo gpio -g write 22 1

noreset : all
    sudo $(AVRDUDE) -p $(AVRDUDEMCU) -P /dev/spidev0.0 -c linuxspi -b 10000 -U flash:w:$(TARGET).hex

fuse :
    sudo gpio -g mode 22 out
    sudo gpio -g write 22 0
    sudo $(AVRDUDE) -p $(AVRDUDEMCU) -P /dev/spidev0.0 -c linuxspi -b 10000 -U lfuse:w:0x62:m -U hfuse:w:0xdf:m -U efuse:w:0xff:m 
    sudo gpio -g write 22 1

clean :
    rm -f *.hex *.obj *.o

但是有人能解释一下为什么当我使用 make 文件时它会起作用,以及为什么当我这样做时它不起作用:

sudo gpio -g mode 22 out
sudo gpio -g write 22 0
sudo /usr/local/bin/avrdude -p t85 -P /dev/spidev0.0 -c linuxspi -b 10000 -U flash:w:blinky.hex

谢谢,我希望它可以帮助别人:)

【讨论】:

  • 我找到了!当我不使用make文件时,我忘记写了:----> sudo gpio -g write 22 1
【解决方案2】:

也许您应该了解一下如何使用 arduino 库并将其添加到您的项目中。然后,当您使用 avr gcc 编译器时,添加库。但是你的第二个代码在服装上不起作用似乎很奇怪。您是否检查过 .hex 文件是否包含十六进制代码? :)

【讨论】:

  • 好的,我会尝试添加 arduino 库,但我仍然不知道它是否应该工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-28
  • 2019-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多