Forum: Mikrocontroller und Digitale Elektronik 2k Flash für Projekt ausreichend?


von Matt B. (mattb)


Lesenswert?

Hallo,

ich will mit einem Attiny 2313 eine Temperaturregelung für einen Lüfter 
aufbauen. Leider kann ich nicht abschätzen ob die 2k Flash des Attiny 
2313 für das Programm ausreichen. Da ich momentan den Schaltplan 
erstelle wäre es gut, wenn mir jemand anhand seiner Erfahrungen sagen 
könnte, ob der Flash für die folgenden Funktionen ausreicht oder ob ich 
auf einen anderen Controller umsteigen muss. Natürlich hängt das auch 
vom Programmierstil ab. Aber den kann man bei Bedarf ja verbessern.

Hier die Funktionen:

- Kommunikation mit übergeordnetem Controller über SPI
- Temperaturmessung mit DS1820 über 1Wire
- Lüfterdrehzahlregelung (PID-Regler) mit Hardware-PWM
- Messung der Lüfterdrehzahl (vermutlich mit INT0-Interrupt)

- Nur während der Entwicklung und dem Debuggen: Datenausgabe über UART

Können die 2k hierfür reichen?

Danke
matt

von Ralf G. (ralg)


Lesenswert?

Probier's doch einfach mal aus. Evtl. auf einem Steckbrett. Da kannst du 
später immer noch auf was größeres umsteigen.

von 4toTakoe (Gast)


Lesenswert?

Mal abgesehen davon, dass der Aufwand für eine Temperaturregelung 
gehörig übertrieben ist sollte der Flash genügen.

Ansonsten gibt es noch den Pin- und Registerkompatiblen ATtiny4313 mit 
4k Flash.

von Matt B. (mattb)


Lesenswert?

Hallo 4toTakoe,

wie kommst du darauf, dass der Aufwand übertrieben ist?
Was könnte man deiner Meinung nach vereinfachen?

zu 1) Da die Regelung ein Subsystem eines größeren Systems ist, kann ich 
auf die SPI-Kommunikation nicht verzichten.

zu 2) Eine Temperaturmessung muss natürlich stattfinden.

zu 3) Der eigentliche Regler, der wird benötigt.

zu 4) Kontrolle ob sich der Lüfter tatsächlich dreht. (Die Info könnte 
man eventuell auch von dem Temperaturverlauf ableiten, aber einen 
digitalen Eingang habe ich gerade noch übrig ;-) ).

Danke schonmal!

von Soul E. (Gast)


Lesenswert?

Matt B. schrieb:

> Können die 2k hierfür reichen?

In Assembler in jedem Fall.

In C hardwarenah programmiert auch.

In C oder C++ über mehrere Abstraktionsebenen verteilt und mit 
Betriebsystem dahinter nicht mehr.

von 4toTakoe (Gast)


Lesenswert?

Gut, ich weiß nicht was bei dir auf Temperatur gehalten werden soll. 
Wenns einfach nur um eine Lüfterregelung geht genügt sowas:

http://www.atmel.com/Images/doc8005.pdf

das kann natürlich ohne weiteres um Schnittstellen erweitert werden.

von Matt B. (mattb)


Lesenswert?

Für das Debuggen will ich diverse Ausgaben über den UART erstellen.
Ich habe gemerkt, dass die Ausgabe von Strings recht viel Data Memory 
benötigt.

Da ich in der Regel die einzelnen Module des Programms einzeln debugge 
bin ich auf die Idee gekommen verschiedene Debug-Modes zu definieren.
1
/* DEBUG-MODE
2
 * ==================
3
 * 0: keine DEBUG-Funktionen
4
 * 1: SPI-Debug
5
 * 2: Temperatur-Debug
6
 * 3: Regler-Debug
7
 */
8
#define DEBUG_MODE  0

Gibt es für den gcc Kompiler Befehle mit denen ihm zum Beispiel sowas 
gesagt werden kann:

Wenn DEBUG_MODE == 1, dann kompiliere die nächste Zeile, ansonsten 
betrachte die folgende Zeile als Kommentar.

Gibt es sowas? Unter welchen Stichwort findet man da was?

Danke

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

ja gibts
1
#if DEBUG_MODE
2
dein code
3
#endif

Zudem kannste progmem nutzen dann landets nicht im RAM, davon hat der 
2313 nur 128byte.
Aber große Debugstrings bei 2k ROM sollte man lassen, das wird dann 
wirklich knapp.

von Coder (Gast)


Lesenswert?

1) Ich nehme zum "Entwickeln" i.d.R. den größten (Flash, RAM) uC den ich 
habe und der in das Design passt.

2) Versuch' macht klu(g)ch, wie Ralf G. beschrieben hat.

von Matt B. (mattb)


Lesenswert?

Ok, damit sollte ich erstmal klar kommen.
Dann werde ich mich mal an die Software setzen...

Danke an alle!

Gruss
matt

von M. N. (Gast)


Lesenswert?

Matt B. schrieb:
> Da ich in der Regel die einzelnen Module des Programms einzeln debugge
> bin ich auf die Idee gekommen verschiedene Debug-Modes zu definieren.

Mach doch nicht solche Umstände.
Nimm einen ATmega88, der keine Tricksereien braucht. Oder die 
pinkompatiblen ..48/168/328. Die haben beim DIL-Gehäuse nur 8 Pins mehr 
und noch einen ADC, falls dieser sich als zweckmäßig erweisen sollte.

von MaWin (Gast)


Lesenswert?

> Können die 2k hierfür reichen?

Ja, und dazu musst du nicht mal in Assembler programmieren sondern 
kannst C verwenden,
aber kluges Programmieren ist vorausgesetzt.

Wenn du printf("Temp=%1.2f",messwert/10.0) schreibst, also printf und 
float verwendest, ist dein Speicher natürlich voll.

von spess53 (Gast)


Lesenswert?

Hi

>Nimm einen ATmega88, der keine Tricksereien braucht. Oder die
>pinkompatiblen ..48/168/328. Die haben beim DIL-Gehäuse nur 8 Pins mehr
>und noch einen ADC, falls dieser sich als zweckmäßig erweisen sollte.

Oder wenn es SMD sein kann den ATTiny1634.

MfG Spess

von Peter D. (peda)


Lesenswert?

Matt B. schrieb:
> - Kommunikation mit übergeordnetem Controller über SPI

Das AVR-SPI ist als Slave völlig unbrauchbar, wenn der Master nicht nach 
jedem Byte lange Wartepausen einlegt.
Deutlich besser geht I2C oder UART.

Für Debugausgaben kann man bequem eine SW-UART nehmen.

von M. N. (Gast)


Lesenswert?

spess53 schrieb:
> Oder wenn es SMD sein kann den ATTiny1634.

Der kann aber nur 12MHz ;-(
Darum gibt es die Mega48/88/168/328 mit 20MHz und auch in SMD ;-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.