Bei Atmel auf der HP. Jeder ATMega kann das geforderte.
MeinProblem ist, dass ich über 2 PWMs 2 Motoren steuern will. Gleichzeitig will ich aber noch die Geschwindigkeit messen, dazu benötige ich midestens 1 Timer/Counter, am besten 2. Der AT90S2313 hat amer nur die Timer 1 und 0, wenn ich das richtig sehe. Ansonsten würde ich vielleicht einen MAX, keine Ahnung irgendwas mit 5495 oder so benutzen, das ist ein PWM, den man über SPI ansteuern kann. Dass muss ja nicht umbedingt sein. Ich würde gern mal in eine Tabelle reinschauen, wo alles aufgelistet ist, Ports ADs Speicher etc. gibts sowas für die AVRs?
Und seht ihr noch ne andere Möglichkeit der Problemlösung?
MFg Moritz
Bei Atmel auf der HP. Jeder ATMega kann das geforderte.
Ja, habs unter http://www.atmel.com/dyn/products/pa...&Direction=ASC gefunden.
Wozu dient genau der EEPROM und der SRAM?
der eeprom ist da um aufgaben die immer gleich sind zu machen
der ist für die kleinigkeiten die gemacht werden
im sram sind die aufwendigeren progs drin
---
Naja, das stimmt für AVRs wohl nicht so ganz
Das Programm welches der AVR ausführt wird im Flashspeicher gespeichert. Im SRAM werden die Variablen, der Stack usw. gespeichert ( kann beliebig oft wiederbeschrieben werden, allerdings sind die Daten nach dem abschalten weg ). Im EEprom können dann Werte gespeichert werden die man dauerhaft sichern möchte, allerdings kann das Eeprom nur 100.000 mal wiederbeschrieben werden, dann können Fehler auftreten. Daher sollte man die Werte nicht ständig ändern. Es eignet sich eigentlich eher um zum Beispiel Parameter zu speichern die von einem Benutzer vorgeben werden und dann immer wieder benutzt werden sollen...
MfG Kjion
Jetzt ncohmal Kurz zu dem PWM. ICh hab hier ein Code gefunden, der mir sehr kompliziert wirkt. Ich würde einfach gerne einen Wert z.B. aus einer Variablen namens Wert an einem beliebigen Pin ausgeben. Was kann ich dann alles weglassen?
Allerdings verstehe ich das alles nciht so ganz.Code:Const True = 1 Const False = 0 Dim Hi As Byte Dim Lo As Byte Dim A As Byte Dim Phase As Bit Dim Pattern As Byte ' Bit pattern for display Pwm Alias Portb.0 ' Modulated Pin Config Timer0 = Timer , Prescale = 64 ' Rate 244 Hz at 4 MHz Clock On Timer0 Timer0_isr ' Jump to Timer1 ISR Config Portb = Output Enable Timer0 ' Enable the timer interrupt Enable Interrupts ' Enable Global Interrupt Lo = 128 ' Initial value for PWM Phase = True Do A = Pind ' Ask for Key Select Case A Case &B11111110 : Lo = 0 ' Lo Time short, Hi Time long Case &B11111101 : Lo = 32 Case &B11111011 : Lo = 64 Case &B11110111 : Lo = 96 Case &B11101111 : Lo = 128 Case &B11011111 : Lo = 160 Case &B10111111 : Lo = 192 Case &B01111111 : Lo = 255 ' Lo Time long. Hi Time short End Select Hi = 255 - Lo Incr Pattern ' Change Bit Pattern Waitms 100 ' Wait 100 ms Loop End Timer0_isr: If Phase = True Then Portb = &HFF ' LED off Timer0 = Lo ' Reload Timer0 Phase = False Else Portb = Not Pattern ' LED on Timer0 = Hi ' Reload Timer0 Phase = True End If Return
Was gibt Prescale an?
Warum 244 Hz?
Warum gebe ich dann einen WErt von 0 bis 255 an?
Ich vermute, dass der Timer0 nach der gesetzten Zeit Timer0 = ... einen Interrupt auslöst und dann den Wert wechselt.
Richtig?/ Falsch?
MFg Moritz
@RCO
Wenn Du den Internen EEprom nicht so belasten willst und noch ein paar Resourcen übrig hast könntest Du auch I²C-EEproms nehmen. Die EE 24LCxx gibts meines Wissens nach mit Speichergrößen von 128 Byte bis zu 8kByte. (bei Reichelt ab rund 25C/St)
Mir sind die sogar lieber, weil mir das abspeichern der Daten über diesen "Umweg" auf einen externen Baustein kurioserweise programmiermäßig leichter fällt, als die Internen Speicherzellen zu nutzen. (bin Autodidakt)
Laut Datenblatt sollen diese EEproms !mindestens! 1Million Schreib/Lesezyklen mitmachen.
mfG aus P
der E-Fan
Aber bevor man auf externes EEprom umsteigt sollte man schon versuchen das interne erst mal voll auszunutzen. Die Handhabung ist eigentlich recht einfach, zumindest in Hochsprachen wie Bascom.
Dort kann man beispielsweise bei der Dimensionierung einfach "ERAM" mit im DIM Befehl angeben. Das war´s schon!
Man sollte halt dieser Variable nicht unbedingt ständig neue Werte zuweisen, mehr ist ansonsten eigentlich nicht zu beachten. 100.000 Schreibzugriffe sind schon eine Menge, ich denke das es nur wenige Anwendungsprogramme gibt wo eine solche Zahl nicht über Jahre reicht.
Danke für die Antworten, dass ist ja eigentlich ziemlich nützlich, wenn man Daten dauerhaft erhalten kann, um z.B. Messdaten zu speichern, die auch nach einem Neustart noch vorhanden sind. ICh hab mich jetzt nochmal etwas eingelesen, der AT90S2313 hat ja eh nur einen Timer, von daher ist er für meine Zwecke eh nicht mehr geeignet. Zudem unterstützt er kein I2C. Also wäre das mit den Externen EEproms eh nix. ICh werd wohl umsteigen. Frank hat sicher noch nen par Boards auf Lager
Nun trotzdem nochmal meine Frage. KÖnnte mir jemand Code schicken, indem ein beliebiger Pin als PWM initialisiert wird und dann der Wert einer Variablen ausgegeben, übernommen, oder wie man das auch immer nennt, wird. Außerdem würde ich gerne Wissen, wo die Verbindung, zwischen dem Prescaler, der Hz-Zahl (244 s.Code), und dem Wert 255..0 liegt.
MFG Moritz
Lesezeichen