Standalone Arduino, aber welcher ?

Hallo,

z.Z. nutze ich einen ATmega 328 für Standalone Projekte, aber bei meinem aktuellen Projekt fehlt etwas der Platz für einen großen Prozessor, außerdem brauche ich nur ein paar Pin's:

2x PWM
2x DigitalOut
1x I2C (SDA, SCL)

Gibt's da was kleineres als den 328 ?

Danke und lg

Kleiner (abgesehen von SMD-Varianten) gibt es, aber die haben dann auch weniger RAM und Flash (verschiedene ATtiny). Wie sieht es damit bei deinem Projekt mit der Sketchgröße aus? Ist der ATmega vollgestopft der liegt großteils brach?
Grüße Uwe

Hallo Uwe,

aktuell etwa 4,5Bytes - lass es am ende das doppelte werden!

Ich bin neugierig: Wie teilst Du ein Byte? Nimmst Du da die 4 niederwertigen Bits oder die Höherwertigen oder abwechselnd eins schon und das andere nicht? :wink: :wink: :wink: :wink: :wink:

Ich nehme mal an 4,5KByte.

Fast alle ATtiny haben max 8kByte Flash und max 512 RAM.
Ich befürchte fast Du mußt bei den ATmegas bleiben.

Grüße Uwe

Das hängt davon ab, was Du machen möchtest. Benötigst Du unbedingt die Arduino Libs?
Wenn nicht, dann kannst Du mit ein paar Tricks das Programm optimieren und auf einem Attiny A,C oder D laufen lassen.

Beispiel:

Es handel sich hier um den Code für das Arduino Nikon Intervalometer.

Compiliert für den Arduino Duemilanove
Binary sketch size: 1,640 bytes (of a 30,720 byte maximum)

Der gleich Code für den Attiny2313 compiliert:
Binary sketch size: 1,392 bytes (of a 2.048 byte maximum)

Und jetzt optimiert:

Binary sketch size: 444 bytes (of a 2.048 byte maximum)

Meine Idee ist, Code zu generieren, der sowohl auf Arduino als auch mit winavr zu kompieren ist.

Die Tricks die ich verwende:

...
#define F_CPU 400000UL
// we build some macros first.
// to increase IR-LED current mulltiple ports can be used
#define IR_LED_ON()		PORTD |= (1<<PD1)   //| (1<<PB1) | (1<<PB2)
#define IR_LED_OFF()		PORTD &= ~(1<<PD1) //  | (1<<PB1) | (1<<PB2))
#define LED_ON()		PORTB |= (1<<PB1)  | (1<<PB2) | (1<<PB3);
#define LED_OFF()		PORTB &= ~((1<<PB1) | (1<<PB2) | (1<<PB3));
#define PULSE_IR()		IR_LED_ON(); _delay_us(13);	IR_LED_OFF(); _delay_us(13)
#define PULSE_Wait()            IR_LED_OFF(); _delay_us(26)
...

und in der init Funktion:

void setup() {
  _OUTPUT(D,pinIRLED);                            // set the pin as an output IR-LED
  _OUTPUT(B,pinCTRLED);                           // set the pin as an output CTRL-LED
  _INPUT(D,5);                                    // initialize the pushbutton pin as an input:
//  _SET(D,5);                                      // with pullup 
}

_OUTPUT, etc. sind auch wieder entsprechende Macros. Das ist schon recht HW nah.

Im Prinzip können alle LIBs Hardware nah verkleiner werden. Probleme habe ich noch mit Servos. Das läuft noch nicht so, wie ich mir das vorstelle.

Die Arduino Umgebung ist schon eine gute Idee für die ersten Schritte.
Mittlerweile habe ich einen Programmer auf einem Breadboard und mache rapid Prototyping auf einem anderen Breadboard mit diversen Attinys und minimalster Anzahl von Bauteilen.

Den Einstieg zu den attinys habe ich über die Kollegen am MIT (high low tech) gefunden.

Mein Ziel ist es weiterhin möglichst lesbaren Code zu generieren, mal abgesehen von den Macros.

F41_ARDU