Hallo zusammen, Ich benötige einen möglichst kleinen Mikrocontroller mit integriertem 8Mhz Quarz und 16 bitte Timer. Ich habe mir ein Bascom Programm zur servoansteuerung überlegt, mit welchen ich die drehgeschwindigkeit über zwischenpositionen bestimmen kann. Dazu habe ich den attiny24 gefunden, der einen 16bit Timer hat. Allerdings habe ich eine Frage: Die Werte des 16bit Timers müssen vorher in variablen gespeichert werden. Kann ich 16bit variablen in einem 8bit prozessor ablegen? Mit freundlichem Gruß, Philipp
> Kann ich 16bit variablen in einem 8bit prozessor ablegen?
Selbstverständlich. Alles eine Frage der Interpretation der
Repräsentation der Information.
Wie wäre es, du schaust zuerst mal in die sprachlichen Grundlagen deines Compilers. Welche Variablen können benutzt werden und welche Bereiche decken die jeweiligen Variablen ab? Word kann z.B. bis 65535, Integer aber nur die Hälfte dieses Bereiches weil es positive und negative Anteile geben kann. Integerzahlen bis 65000 sind also nicht möglich, höchstens bis zur Hälfte von 65535. +- 37767.
igge schrieb: > Wie wäre es, du schaust zuerst mal in die sprachlichen Grundlagen deines > Compilers. Welche Variablen können benutzt werden und welche Bereiche > decken die jeweiligen Variablen ab? > Word kann z.B. bis 65535, Integer aber nur die Hälfte dieses Bereiches > weil es positive und negative Anteile geben kann. Integerzahlen bis > 65000 sind also nicht möglich, höchstens bis zur Hälfte von 65535. +- > 37767. Um es besser zu verdeutlichen: https://de.wikipedia.org/wiki/Integer_(Datentyp)#Maximaler_Wertebereich_von_Integer Das was du suchst ist WORD, bzw. uin16_t, bzw. unsigned int.
Rene K. schrieb: > Das was du suchst ist WORD, bzw. uin16_t, bzw. unsigned int. Und das soll es in Bascom geben? Philipp schrieb: > ... ein Bascom Programm zur servoansteuerung
Du kannst einfach die "stdint.h" Datentypen verwendent: https://en.wikibooks.org/wiki/C_Programming/C_Reference/stdint.h also so: #include "stdint.h"
1 | int32_t x; |
2 | |
3 | x=12345678; |
Philipp schrieb: > Ich benötige einen möglichst kleinen Mikrocontroller Was soll den klein sein? Gehäuse (Volumen oder Fläche) Pinanzahl Leistungsaufnahme Kosten Aussenbeschaltung der Rest ergibst sich durch deine Softwareanforderungen Es gibt auch 32 Bit µC die in den oben genannten Punkten so klein sind wie 8 Bit µC
Hallo, Wolfgang schrieb: > Rene K. schrieb: >> Das was du suchst ist WORD, bzw. uin16_t, bzw. unsigned int. > > Und das soll es in Bascom geben? der Link zu den Bascom-Datentypen wurde doch schon oben gepostet... @Markus (Gast): und warum soll er nicht einfach die Bascom-Datentypen nehmen? Noch als Hinweis an den TO: die AVR haben keinen "integriertem 8Mhz Quarz" sondern einen internen RC-Oszillator. Das kann bei UART-Übertragung und Zeitgeschichten ein Problem sein, weil der wesentlich ungenauer als ein Quarz ist. Gruß aus Berlin Michael
Wolfgang schrieb: > Und das soll es in Bascom geben? http://avrhelp.mcselec.com/index.html?language_fundamentals.htm Etwas nach unten scrollen bis zum Abschnitt "Elementary Data Types"
1 | Byte 1 Byte 0 to 255 |
2 | Integer 2 Bytes -32,768 to +32,767 |
3 | Word 2 Bytes 0 to 65535 |
4 | Long 4 Bytes -2147483648 to 2147483647 |
5 | Dword 4 Bytes 0 to 4294967295 |
... und sich was passendes aussuchen. Am Rande sieht man: Bascom kennt keinen vorzeichenbehafteten 8-Bit-Datentyp.
Guten Morgen, erstmal danke für eure antworten. Mit klein meine ich die Gehäusegröße, bzw. Pinanzahl und Außenbeschaltung. Es soll aber kein SMD sein.. Das Teil soll in eine Modellbahn eingebaut werden, in der es Platzprobleme gibt. Ich brauche (für 2 servos) aber 2 Eingänge + 2 Ausgänge ISP-Fähig muss er auch sein. Es müssen auch keine 8Mhz sein, aber 1Mhz ist etwas zu wenig. Die Softwareanforderungen sind recht gering. - Ein paar wenige if-bedingungen - Addition in der timervariable (63.000 bis 65.000) Im Datenblatt des tiny24 steht int. 8Mhz Quarz (wenn ich das richtig gedeutet habe). Welchen Controller schlagt ihr denn dafür vor?
Philipp schrieb: > Im Datenblatt des tiny24 steht int. 8Mhz Quarz (wenn ich das richtig > gedeutet habe). Nein, das steht da nicht. Integriert ist ein RC-Oszillator, der auch mit 8 MHz betrieben werden kann, aber deutlich ungenauer ist als ein quarzstabilisierter Oszillator. Einen Quarz kann man zur Stabilisierung anschließen, damit aber belegt man zwei Anschlüsse am Controller. Genauer Takt ist dann wichtig, wenn mit anderen Controllern über asynchrone serielle Protokolle kommuniziert werden soll (UART, serielle Schnittstelle), denn dann sind Abweichungen vom Solltakt potentielle Datenfehler. Wenn aber synchrone serielle Protokolle benutzt werden (SPI, I2C etc.), ist das nicht relevant.
Philipp schrieb: > Kann ich 16bit variablen in einem 8bit prozessor ablegen? 8 bit bedeutet bei einem Prozessor lediglich, vereinfacht gesagt, dass er gleichzeitig 8 bit innerhalb eines Taktes verarbeiten kann. Zum Verarbeiten einer 16 bit Variablen braucht ein 8 bit Prozessor also mindestens 2 Takte, das ist dann aber schon alles.
Nachtrag: Habe zwar interner Quarz geschrieben, wollte aber nur auf die int. 8Mhz verweisen.
Der eingebaute RC Oszillator wird für Servosteuerung ausreichen. Der ist vorkallibriert und kann über einen Registerwert nachjustiert werden. Wenn die Modellbahn nicht gerade draussen bei Temperaturen von -20 ... +40°C fahren muss dann reicht die Stabilität bei Zimmertemperatur dicke. Wenn de Tiny24 passt dann nimm den doch, ansosten nach 'Atmel AVR parametric search' suchen und etwas passendes auswählen.
Philipp schrieb: > Es müssen auch keine 8Mhz sein, aber 1Mhz ist etwas zu wenig. ach? Woran machst du das aus? Welche rechen-intensive Dinge hast du denn in deiner Eisenbahn vorgesehen? Für einen oder zwei Servo anzusteuern kannst du das Ding zur Not auch mit 100 KHz betreiben.
:
Bearbeitet durch User
Wegstaben V. schrieb: > Für einen oder zwei Servo anzusteuern kannst du das Ding zur Not auch > mit 100 KHz betreiben. Naja, mit 100kHz kann Dein Servo nur max 100 Positionen einnehmen. Aber 1MHz dürfte schon über der Genauigkeit des Servos liegen. Man kann die Servopulse aber auch mit Delay erzeugen. Bei 2 Servos sind das max 4ms mit 16ms Pause für die anderen Aufgaben. Dann geht auch ein ATtiny25.
M. K. schrieb: > Peter D. schrieb: >> Naja, mit 100kHz kann Dein Servo nur max 100 Positionen einnehmen. > > Wieso das? Timer mit 100kHz angesteuert ==> 10µs Auflösung Servo min 1ms .. max 2ms ==> 1000µs Bereich
Danke für eure Antworten, werde das mit dem tiny24 in nächster Zeit mal testen. Einen mit 8pin und 16bit Timer habe ich leider nicht gefunden.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.