Attiny 13 mit Arduino Uno programmieren?

Gast #2598938
Lesenswert?

Also folgendes:
ich habe mir nen Arduino Uno zugelegt in der Hoffnung damit ein wenig 
basteln zu können.
Jetzt würde ich gerne wissen wie ich ein Hexfile auf einen Attiny13 
bekomme. Auf was muss ich achten (benötigte Hardware, steckbrett 
(welches? oder ist das egal) etc.
Am liebsten wäre mir ein Tutorial oder sowas in der richtung, bin was 
das betrifft ein totaler anfänger, aber ohne den µc gehts leider nicht 
weiter.
Gast #2615346
Lesenswert?

Für den Attiny13 müsste man in der Arduino IDE 1.0 eine neue Variante 
aufsetzen. Das ist grundsätzlich nicht sooo schwer, aber ein Anfänger 
(you) oder ein Nicht-Arduino-Testen-Könner (me) hat es dabei schwer.

Man muss als erstes die Beschreibung der Boards in der Datei boards.txt 
erweitern, damit ein neuer Eintrag in der IDE unter Boards erscheint:

arduino-1.0\hardware\arduino\boards.txt
1
# ... alter Inhalt
2
# Neu HINZUGEFÜGT
3

4
attiny13.name=ATtiny13 (internal 1.2 MHz clock)
5
attiny13.bootloader.low_fuses=0x6a
6
attiny13.bootloader.high_fuses=0xff
7
attiny13.upload.maximum_size=1024
8
attiny13.build.mcu=attiny13
9
attiny13.build.f_cpu=1200000L
10
attiny13.build.core=arduino:arduino
11
attiny13.build.variant=tiny13

Dann ist eine neue Datei anzulegen:
arduino-1.0\hardware\arduino\variants\tiny13\pins_arduino.h

In dieser Datei steht:
1
/*
2
  pins_arduino.c - pin definitions for the Arduino board
3
  Part of Arduino / Wiring Lite
4

5
  Copyright (c) 2005 David A. Mellis
6

7
  This library is free software; you can redistribute it and/or
8
  modify it under the terms of the GNU Lesser General Public
9
  License as published by the Free Software Foundation; either
10
  version 2.1 of the License, or (at your option) any later version.
11

12
  This library is distributed in the hope that it will be useful,
13
  but WITHOUT ANY WARRANTY; without even the implied warranty of
14
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15
  Lesser General Public License for more details.
16

17
  You should have received a copy of the GNU Lesser General
18
  Public License along with this library; if not, write to the
19
  Free Software Foundation, Inc., 59 Temple Place, Suite 330,
20
  Boston, MA  02111-1307  USA
21

22
  $Id: pins_arduino.c 565 2009-03-25 10:50:00Z dmellis $
23

24
  Modified 28-08-2009 for attiny84 R.Wiersma
25
  Modified 09-10-2009 for attiny45 A.Saporetti
26
*/
27

28
#ifndef Pins_Arduino_h
29
#define Pins_Arduino_h
30

31
#include <avr/pgmspace.h>
32

33
// ATMEL ATTINY13 / ARDUINO
34
//
35
//                  +-\/-+
36
// Ain0 (D 5) PB5  1|    |8  Vcc
37
// Ain3 (D 3) PB3  2|    |7  PB2 (D 2) Ain1
38
// Ain2 (D 4) PB4  3|    |6  PB1 (D 1) pwm1
39
//            GND  4|    |5  PB0 (D 0) pwm0
40
//                  +----+
41

42
#define TIMER0_OVF_vect TIM0_OVF_vect // avoid modification of WInterrupts.c file
43

44
#define digitalPinToPCICR(p)    ( ((p) >= 0 && (p) <= 4) ? (&GIMSK) : ((uint8_t *)0) )
45
#define digitalPinToPCICRbit(p) ( PCIE )
46
#define digitalPinToPCMSK(p)    ( ((p) <= 4) ? (&PCMSK) : ((uint8_t *)0) )
47
#define digitalPinToPCMSKbit(p) ( (p) )
48

49
#ifdef ARDUINO_MAIN
50

51
// these arrays map port names (e.g. port B) to the
52
// appropriate addresses for various functions (e.g. reading
53
// and writing) tiny45 only port B 
54
const uint16_t PROGMEM port_to_mode_PGM[] = {
55
  NOT_A_PORT,
56
  NOT_A_PORT,
57
  (uint16_t) &DDRB,
58
};
59

60
const uint16_t PROGMEM port_to_output_PGM[] = {
61
  NOT_A_PORT,
62
  NOT_A_PORT,
63
  (uint16_t) &PORTB,
64
};
65

66
const uint16_t PROGMEM port_to_input_PGM[] = {
67
  NOT_A_PIN,
68
  NOT_A_PIN,
69
  (uint16_t) &PINB,
70
};
71

72
const uint8_t PROGMEM digital_pin_to_port_PGM[] = {
73
  PB, /* 0 */
74
  PB,
75
  PB,
76
  PB,
77
  PB, 
78
  PB, // 5
79

80
};
81

82
const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[] = {
83
  _BV(0), /* 0, port B */
84
  _BV(1),
85
  _BV(2),
86
  _BV(3), /* 3 port B */
87
  _BV(4),
88
  _BV(5),
89

90
};
91

92
const uint8_t PROGMEM digital_pin_to_timer_PGM[] = {
93
  TIMER0A, /* OC0A */
94
  TIMER0B,
95
  NOT_ON_TIMER,
96
  NOT_ON_TIMER,
97
  NOT_ON_TIMER,
98
  NOT_ON_TIMER,
99
};
100

101
#endif
102

103
#endif

Es ist eine leichte abgeänderte Version (Pinbeschreibung + TIMER0... 
Define) der entsprechenden Datei für den Attiny8 aus dem 
https://github.com/damellis/attiny Paket.

Wie gesagt, theoretisch wäre es das. Die Warnungen beim Compile kann man 
auch wegbekommen, wenn man mehr an der eigentlichen Arduino core-Source 
fummelt. Es ist aber IMHO icht notwenig/erwünscht das zu tun.

Und wie auch gesagt, ist das der theoretische Weg. Das eigentliche ISP 
über den Arduino UNO auf den Attiny13 (angeschlossen wie Attiny45 oder 
Attiny8) kann ich mangels Hardware nicht testen.
Gast #2615369
Lesenswert?

Add:

In der Datei arduino-1.0\hardware\arduino\cores\arduino\Arduino.h
kann man die Zeile
1
#if defined(__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) || defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)

noch um ein || defined(_AVR_ATtiny13_) erweitern.

Es ist aber nicht so gut dokumentiert was die daraufhin folgenden Makros
#define DEFAULT 0
#define EXTERNAL 1
#define INTERNAL 2
bewirken. Mal im Sourcecode stöbern. DEFAULT hängt mit dem ADC zusammen.
Gast #2615798
Lesenswert?

Mit dem Quellcode der Arduino-Bibliotheken. Mit den Makros DEFAULT, 
EXTERNAL und INTERNAL werden für bestimmte AVRs bestimmte Codeteile 
angepasst.

Und die Anpassung bei der das DEFAULT verwendet wird, betrifft die 
Hardware der im AVR enthaltenen Analog-Digital-Converter 
ADC-Einheit.

Die anderen Anpassungen mit EXTERNAL oder INTERNAL habe ich beim 
Reinschauen in den Quellcode des Arduino nicht gesehen.
Gast #3590900
Lesenswert?

Weil es hier noch keine Success-Meldung gibt:

Es geht! Danke Krapao!

1. boards.txt angepasst wie oben
2. pins_arduino.h erstellt wie oben
3. Arduino.h angepasst wie oben

Und dieser Code hat schon mal gemacht was er soll, blinken an Pin6:

void setup()
{
 pinMode(1, OUTPUT);
}
void loop() {
 digitalWrite(1, HIGH); // set the LED on
 delay(1000); // wait for a second
 digitalWrite(1, LOW); // set the LED off
 delay(1000); // wait for a second
}
#3590912
Lesenswert?

Nique schrieb:
> Weil es hier noch keine Success-Meldung gibt:
>
> Es geht! Danke Krapao!
>
> 1. boards.txt angepasst wie oben
> 2. pins_arduino.h erstellt wie oben
> 3. Arduino.h angepasst wie oben

Krass wie einfach es sein kann, einen solchen Boliden wie den Tiny13 
einfach mal so zu programmieren. Zum Glück gibts Arduino, sonst wüsste 
man gar nicht wie man da anfange sollten. Danke danke danke für diesen 
Tip! Endlich kann ich meine ganzen tinys wieder aus dem Müll holen....
#3591111
Lesenswert?

Harald Nagy schrieb:
> Quack schrieb:
>> Kuebellord, hast du kein Leben?
>
> Vorsicht, hier wird man ganz leicht zur S** gemacht...
>
> Bzgl hilfreicher Tipps... vlg Thread von gestern...

Ach du verträgst auch gar nichts. Nur weil du absolut keinerlei 
Selbstreflektion hast. Sonst hättest du mal gemerkt, dass genau DEIN 
Post und DEINE Kritik an anderen Usern, Off-Topic und unangemessen waren 
und du damit genau das gemacht hast, was du eigentlich kritiseren 
wolltest. Und das haben leider auch andere so gesehen. Damit kommst wohl 
nicht klar. Heulst du damit jetzt jeden Thread voll? Wie wärs mal mit 
EINSICHT?

gruß cyblord
Gast #3591127
Lesenswert?

>
> Ach du verträgst auch gar nichts. Nur weil du absolut keinerlei
> Selbstreflektion hast. Sonst hättest du mal gemerkt, dass genau DEIN
> Post und DEINE Kritik an anderen Usern, Off-Topic und unangemessen waren
> und du damit genau das gemacht hast, was du eigentlich kritiseren
> wolltest. Und das haben leider auch andere so gesehen. Damit kommst wohl
> nicht klar. Heulst du damit jetzt jeden Thread voll? Wie wärs mal mit
> EINSICHT?
>
> gruß cyblord

Ach halt die Klappe. Du bist in Zukunft einfach unsichtbar für mich...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren