Hallo,
nachdem ich jahrelang mit PIC-Controllern gearbeitet habe, möchte ich
jetzt etwas mit dem ATiny841 realisieren.
Dabei sind mir einige Dinge im Vergleich zu aktuellen PICs aufgefallen,
bei denen ich Euch fragen möchte, ob ich es vielleicht nicht richtig
erkannt habe:
1. Im Assembler vermisse ich einen Multiplikationsbefehl
2. Die internen RC-Oszillatoren sind recht ungenau, möchte ich eine
Kommunikation mittels UART aufbauen, dann muss ich einen Quarz nehmen
3. Nicht benötigte Hardwareblöcke lassen sich nicht abschalten
4. Besitzt nur einen 10Bit-ADC
Ich möchte hier keine neuen Konflikte Atmel vs. Microchip entfachen,
sondern nur einige Zusatzinfos zu meinen Beobachtungen enthalten. Die
Trolls mögen sich also bitte zurückhalten.
Jens_F schrieb:> nachdem ich jahrelang mit PIC-Controllern gearbeitet habe, möchte ich> jetzt etwas mit dem ATiny841 realisieren.> Dabei sind mir einige Dinge im Vergleich zu aktuellen PICs aufgefallen,
ATiny841 im Vergleich zu welchem PIC?
Jens_F schrieb:> 1. Im Assembler vermisse ich einen Multiplikationsbefehl
Dann nimm einfach einen controller mit multipliert? Atmega oder die
neueren ATtinies.
> 2. Die internen RC-Oszillatoren sind recht ungenau, möchte ich eine> Kommunikation mittels UART aufbauen, dann muss ich einen Quarz nehmen
Hängt von der Baudrate ab. Du kannst den Oscillator per Software
trimmen.
> 3. Nicht benötigte Hardwareblöcke lassen sich nicht abschalten
Natürlich geht das.
> 4. Besitzt nur einen 10Bit-ADC
Nimm einen größeren Controller? Du kannst außerdem Mitteln, um die
Auflösung zu erhöhen. Bei den meisten Anwendungen hat das Analogsignal
sowieso nicht die erforderlichen 60dB SNR, um die 10 Bit auszunutzen.
Jens_F schrieb:> 1. Im Assembler vermisse ich einen Multiplikationsbefehl
Programmiere einfach in C, dann macht der Compiler das für Dich.
Mit 8kB Flash ist C kein Thema.
> 2. Die internen RC-Oszillatoren sind recht ungenau, möchte ich eine> Kommunikation mittels UART aufbauen, dann muss ich einen Quarz nehmen
Soll es zuverlässig sein, nimm einen Quarz.
Fürs Hobby geht aber auch der interne RC.
Jens_F schrieb:> 3. Nicht benötigte Hardwareblöcke lassen sich nicht abschalten
Nach dem Reset sind alle IO-Pins in tristate. Sonderfunktionen müssen
erst eingeschaltet werden.
Jens_F schrieb:> 4. Besitzt nur einen 10Bit-ADC
Mit MUX auf alle IO-Pins und Gain.
Was hindert Dich eigentlich daran, mal ins Datenblatt zu schauen? Da
wirst Du sowieso nicht darum herumkommen, wenn Du den Tiny841
programmieren willst.
Ich finde die 441/841 Klasse.
2 Uarts in einem sehr kleinen Controller und zumindest teilweise
mögliches routing der Hardware auf die Pins - sehr schön.
> 1. Im Assembler vermisse ich einen Multiplikationsbefehl
Richtig
> 2. Die internen RC-Oszillatoren sind recht ungenau, möchte ich eine> Kommunikation mittels UART aufbauen, dann muss ich einen Quarz nehmen
Ode reinen Keramik Resonator. Ja, der R/C Oszillator ist nicht genau
genug. Man kann ihn justieren, aber seine Abhängigkeit von Temperatur
und Spannung ist trotzdem hinderlich.
3. Nicht benötigte Hardwareblöcke lassen sich nicht abschalten
Im PRR Register kannst du einige Komponenten deaktivieren. Beim ADC
lohnt es sich am meisten.
4. Besitzt nur einen 10Bit-ADC
Ja. Alle ATmega und ATtiny (die ich kenne) haben einen 10bit ADC. Die
XMega Serie bietet 12 bit.
Jens_F schrieb:> 1. Im Assembler vermisse ich einen Multiplikationsbefehl
Ja außer einen wenigen topaktuellen ATtinys, die auf einem XMega-Kern
basieren, können die Tinys leider wirklich nicht in Hardware
multiplizieren. Das ist für eine ganze Menge Anwendungen, für die die
Tinys ansonsten sehr gut geeignet wären (Regelung, Signalverarbeitung)
tatsächlich ein recht hinderliches Manko.
Multiplikation in (optimierter) Software kostet etwa Faktor 20 mehr
Rechenzeit und auch deulich mehr Speicherplatz, weil man, um auch nur
diesen Faktor zu erreichen, jeder 8x8-Multiplikation eine eigene
Code-Instanz gönnen muß. Ansonsten ist man eher bei einem Faktor
irgendwo um die 30.
> 2. Die internen RC-Oszillatoren sind recht ungenau, möchte ich eine> Kommunikation mittels UART aufbauen, dann muss ich einen Quarz nehmen
Nein, musst du nicht, jedenfalls nicht zwingend. Kommt auf die Anwendung
an. Es gibt jedenfalls etliche Möglichkeiten, die Verwendung eines
Quarzes zu umgehen. Alle wurden hier schon hundertfach diskutiert.
> 3. Nicht benötigte Hardwareblöcke lassen sich nicht abschalten
Doch, das allermeiste schon. SPI, I2C, alle UARTs, alle Timer, ADC, AC,
BOD, interne Referenz, Digitaleingangsstufen aller Pins und auch den
MCU-Core selber. Was bleibt denn da eigentlich noch über, was sich nicht
abschalten ließe? Mir scheint fast: GARNIX.
> 4. Besitzt nur einen 10Bit-ADC
Ja. Allerdings sind ADCs mit höherer Auflösung in einem µC meist
sowieso nur schöner Schein. Es ist nämlich unwahrscheinlich schwierig
bis fast unmöglich, für ein hinreichend rauschfreies Analogsignal zu
sorgen, um höhere Auflösungen tatsächlich sinnvoll nutzen zu können,
wenn so eine Super-EMV-Schleuder, wie sie ein µC-Core darstellt, nur
Bruchteile von Millimetern entfernt liegt...
c-hater schrieb:> Es ist nämlich unwahrscheinlich schwierig bis fast unmöglich, für ein> hinreichend rauschfreies Analogsignal zu sorgen, um höhere Auflösungen> tatsächlich sinnvoll nutzen zu können, wenn so eine Super-EMV-Schleuder,> wie sie ein µC-Core darstellt, nur Bruchteile von Millimetern entfernt> liegt...
Das Problem lässt sich in den Griff bekommen, indem man während der
Messung die EMV-Schleuder abschaltet (d.h. schlafenlegt) und sie z.B.
durch einen Interrupt des ADC nach Abschluss der Messung wieder
aufweckt.
Es gibt µC-Architekturen, die ohne Interaktion des CPU-Kerns auch den
Eingangsmultiplexer des ADCs bedienen können, und eine ganze Latte von
Messungen bei deaktivierter CPU durchführen können.
Und damit sind, ein sauberes restliches Schaltungsdesign vorausgesetzt,
tatsächlich auch deutlich höhere Auflösungen als 10 Bit realistisch
verwendbar.
Jens_F schrieb:> nachdem ich jahrelang mit PIC-Controllern gearbeitet habe, möchte ich> jetzt etwas mit dem ATiny841 realisieren.
Warum ausgerechnet Tiny? Nimm lieber Mega, die sind besser.
Du nimmst Tiny, die ohne MUL sind, statt Mega, die MUL haben, und dann
beschwerst du dich, daß du kein MUL hast... Solch Witz verstehe ich
schlecht...
Für durchschnittliche Verwendung könnte ich dir zwei Mega nennen: die
Reihe 48-88-168-328 (alle mit PA) und die Reihe 324-644-1284 (alle außer
letzten mit PA, letzte mit P). Man kann damit meistens leben, falls
nicht, dann nimm Mega2560. Mehr Sortiment brauchst du eigentlich nicht,
Tiny schon gar nicht.
Ja, ab und zu kommen besondere Wünsche, z.B. DAC 12 bit oder ADC 18 bit.
Für solche Wünsche gibt es viele externe Chips, das sollte eigentlich
reichen. Für alltäglichen Gebrauch ist 10 bit ADC mehr als ausreichend.
Große Vorteil von Mega gegen 8 bit PIC ist RAM ohne Banking. Somit sind
viel größere Arrays gut realisierbar, als bei PIC. Aber das wirst du mit
Assembler kaum spüren, dafür brauchst du C. Daß C-compiler für AVR
kostenlos ist und für PIC relativ teuer, das weiß du schon sicher? Das
ist zweite wichtigste Vorteil von AVR.
> 1. Im Assembler vermisse ich einen Multiplikationsbefehl
gibt es beim ATtiny841 nicht. Die neuen 3000/4000 ATmegas haben einen,
die könntest du dir vielleicht anschauen.
> 2. Die internen RC-Oszillatoren sind recht ungenau, möchte ich eine> Kommunikation mittels UART aufbauen, dann muss ich einen Quarz nehmen
stimmt so nicht. Die sind sogar sehr genau. Sind für 3,3V ab Werk
kalibriert. Für andere Ub kann man die per Register nachjustieren
> 3. Nicht benötigte Hardwareblöcke lassen sich nicht abschalten
direkt abschalten geht nicht, aber Sleepmode Zustände kennt er schon
> 4. Besitzt nur einen 10Bit-ADC
hat mehrere Eingänge
> Ich möchte hier keine neuen Konflikte Atmel vs. Microchip entfachen
Atmel wurde von Microchip gekauft
Hi
>> 1. Im Assembler vermisse ich einen Multiplikationsbefehl>gibt es beim ATtiny841 nicht. Die neuen 3000/4000 ATmegas haben einen,>die könntest du dir vielleicht anschauen.
Haben aber den Nachteil, das man sie nicht mehr mit einfachem ISP
programmieren kann. Die brauchen UPDI.
MfG Spess
spess53 schrieb:> Haben aber den Nachteil, das man sie nicht mehr mit einfachem ISP> programmieren kann. Die brauchen UPDI.
Einfacher ist mit nur noch einem Pin UPDI.
Zeit, daß das olle ISP endlich abgelöst wird.
Maxim B. schrieb:> Warum ausgerechnet Tiny? Nimm lieber Mega, die sind besser.
Pauschale Empfehlungen sind unsinnig weil es immer auf den konkreten
Einsatzfall ankommt.
Braucht man 2 Uarts in einem schmalen SMD 14Pinner ist der 4/841 meines
Wissens der günstigste AVR.
Jens schrieb:> Pauschale Empfehlungen sind unsinnig weil es immer auf den konkreten> Einsatzfall ankommt.
Genau, mindestens genauso schwachsinnig, wie der ursprüngliche
Troll-Post, bei dem irgendeinPIC mit einem ATtiny verglichen wird.
HI
>Einfacher ist mit nur noch einem Pin UPDI.>Zeit, daß das olle ISP endlich abgelöst wird.
Ich habe damit keine Probleme. Aber inwieweit die hier oft oft
empfohlenen Programmier-Clone damit klarkommen entzieht sich meiner
Kenntnis.
MfG Spess
Leute, kommt mal wieder runter.
Der TO hat sich einen ATtiny angeschaut und dort sind ihm Unterschiede
zu den Mikrocontrollern aufgefallen, die er bisher kannte. Nur darum
geht es.
Warum phantasiert ihr hier dazu, er habe einen falschen µC gekauft und
bräuchte zwei UART? Warum behauptet ihr, er habe das Datenblatt nicht
angeschaut?
Ohne Erfahrung mit den Modellen fällt es jedem Anfänger schwer, aus den
hunderten Seiten die Infos heraus zu ziehen, die er braucht. Da darf man
doch wohl mal nachfragen, ohne gleich doof angemacht zu werden.
Jens_F schrieb:> nachdem ich jahrelang mit PIC-Controllern gearbeitet habeStefanus F. schrieb:> Ohne Erfahrung mit den Modellen fällt es jedem Anfänger schwer
fällt Dir was auf?
Stefanus F. schrieb:> Der TO hat sich einen ATtiny angeschaut und dort sind ihm Unterschiede> zu den Mikrocontrollern aufgefallen, die er bisher kannte. Nur darum> geht es.
Na ja. Ich finde die Liste der Dinge, die er bemäkelt, schon etwas
merkwürdig. Ob die ALU einen Befehl für die Multiplikation hat, ist ja
nun wirklich vollkommen nebensächlich. 99% aller Programmierer werden
Code, der Multiplikationen (oder Divisionen) verlangt, in C schreiben.
Daß ein Hardware-Multiplier schneller ist, ist unbestritten. Aber wie
relevant ist das in der Praxis? Und falls es relevant sein sollte,
spricht das dann nicht lediglich gegen die getroffene Wahl des µC? Denn
es gibt ja AVR mit einem solchen Multiplier.
Beim 10-Bit ADC sei festzuhalten, daß das in dieser Klasse state of the
art ist. Die 8-Bit PICs haben mehrheitlich auch nichts anderes. Und das
"Abschalten von Hardwareblöcken" machen die AVR lediglich etwas anders
und möglicherweise etwas weniger konsequent als die PICs. Nicht daß es
praktische Relevanz hätte. Wenn man vom Marketinggeschrei absieht, kann
man mit einem AVR genauso stromsparende Lösungen bauen wie mit einem
PIC.
> Warum behauptet ihr, er habe das Datenblatt nicht angeschaut?
Weil man nach der Lektüre des Datenblatts solche Fragen nicht stellen
würde?
Jens schrieb:> Pauschale Empfehlungen sind unsinnig weil es immer auf den konkreten> Einsatzfall ankommt.> Braucht man 2 Uarts in einem schmalen SMD 14Pinner ist der 4/841 meines> Wissens der günstigste AVR.
Je nachdem.
Ist man ein Profi, hat man ganz bestimmte Vorgaben - dann sollte man
genau richtige Variante von AVR aussuchen, aus vielen Tausenden
möglichen.
In Hobby ist das nicht so sinnvoll. Als Hobbyist kann man schwer zu
große Sortiment parat zu Hause halten. So sollte man am besten ein paar
möglichst universelle Varianten wählen, sie bestens einstudieren, mit
allen ihren Problemen - und sie immer für alles benutzen, es sei denn,
geht gar nicht. Aber für typische Aufgaben reichen Megas 328... und
1284P... völlig aus.
Das gilt auch für andere Teile. Transistoren, Trimmer usw. Als Hobbyist
sollte man sich etwas in Sortiment beschränken, um alles besser zu
kennen.
So denke ich.
Zu viele Varianten - das ist nicht immer gut. Am Ende wird man nur
Datenblätter lesen und lesen, zu wirklicher Neubau kommt es nie.