-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: ist das zu viel für 2313?

  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    30.12.2008
    Beiträge
    1.418

    ist das zu viel für 2313?

    Anzeige

    Code:
    $regfile = "2313Def.dat"
    $crystal = 7372800                                          '18.08MHc*24=433.92MHc, AVR core 18.08MHc/128 by default
    Config Portd = Output
    
    Dim A As Double
    Dim B As Double
    Dim Pause As Double
    dim x as double
    Portd = 255
    A = 0
    
    Do
    X = X + 1
    A = Sin(x)
    B = 255 - a
    Portd.1 = 0
    For Pause = 1 To A : Next Pause
    Portd.1 = 1
    For Pause = 1 To B : Next Pause
    If X = 180 Then X = 0
    Loop
    ich wollt eigentlich einen sinus generator bastel der auf einen pin mir sinus aus gibt und am anderen genau das negativ also sinus 180° phasen versetzt aber ich hab bei dem programm 123% flash used wär froh wenn mir jemand einen tipp geben kann wie man das am einfachsten macht ohne den flash zu überfüllen ich wollt den 2313 nehmen weil ich an dem reichlich leds schon dran hab und der Programmer stecker ist auch schon dran ich will mir keine neu leiterplatte noch zam löten.
    mfg thomas

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.112
    Wenn du nur 180 Werte, also ein Wert pro Grad berechnest, brauchst du dann wirklich den Double Typ?
    Der Wertebereich von sin(x) ist 0 bis Pi/2.
    Also wird A nur von 0 bis 1,57 laufen, B von 255 bis 253,43.
    Da du step 1 in den Schleifen hast, tut sich da auch nicht so viel.

    Gruß

    Rolf

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    30.12.2008
    Beiträge
    1.418
    das double geht ja nur auf kosten des sram´s ich denke das sin mir den flash klaut das programm ist quark hab ich gemerkt aber trotzdem darf der flash doch noch nich voll sein oder?

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.02.2005
    Ort
    Hamburg
    Alter
    31
    Beiträge
    4.255
    Den Sinus in Echtzeit zu berechnen, brauch sehr lange und führt auch zu einem sehr großen Code, der nicht mehr ins Flash passt.
    Mach dir ne Sinustabelle mit ganzzahligen Einträgen. Dann ncoh per Hardware-PWM ausgeben, und es läuft garantiert 100mal schneller als deine Lösung...

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.112
    Zitat Zitat von Thomas$
    das double geht ja nur auf kosten des sram´s
    Ne, das geht auch voll in die Code Länge.
    Schau dir mal den Code an, wenn du Single anstatt Double in der Sinus-Berechnung machst. Wenn du eine Wertetabelle mit Lookup machst, wie von Uwe vorgeschlagen, wird es noch viel besser. Obwohl du 90 Werte im Flash legen würdest, wäre der Code wesentlich kürzer.

    Gruß

    Rolf

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    30.12.2008
    Beiträge
    1.418
    ich hab noch nen atmega8 gefunden hab aber leider danneben bei den fusebits gesetzt und es zu spät gemerkt. ich werd also eine werte tabelle anlegen müssen ok thx

  7. #7
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Für einen guten Generator mit den 2313 sollte man für die Ausgange einen DA-Wandler statt dem PWM nehmen. Auch eine R2R Kette wäre schon deutlich besser. Die Daten kommen aus einer Tabelle (256 oder 512 Einträge) und der Index wird durch fortlaufendes Addieren der Phase berechent. Das findet man auch als DDS Generator. Das ist allerdings eine Anwendung wo Assembler wirklich hilfreich ist.

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    30.12.2008
    Beiträge
    1.418
    assembler für einen basic verwöhnten?? gibts da ein codeschnipsel für den DA-wandler? hat der 2313 einen?

  9. #9
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Die AVR Coontoller haben keinen DA Wandler drin. Man kann sich aber einen einfachen extern bauen, duch eine Widerstandskette an 7-8 IO- Pins (bevorzugt von einem Port). Die Alternative mit Hardware PWM ist schon einiges langsamer, geht aber auch noch. Mit ca. 8 MHz durch 256 geteilt hätte man eine PWM Frequenz von etwa 30 kHz. Das würde für Signalfrequenz bis etwa 5 kHz reichen, mit 7 Bit PWM oder einer höheren Taktfrequenz auch mehr.


    Möglich wäre z.B. eine rein in ASM geschrieben Interruptroutine für einen timer interrupt. Der eigentliche ASM Teil ist recht kurz (ca. 30 Befehle) , soll ja auch sehr schnell sein. Den Teil könnte man z.B. per inline ASM einbinden. Man hätte dann im Hintergrund den Sinus (variabler Frequenz) laufen lassen und kann sich im Hauptprogramm um eine Testenabfrage usw. kümmern. Wäre ein schönes Projekt, um sich mal mit dem inline ASM von Bascom auseinanderzusetzen.


    Was ich allerdings nicht weiss, ist wie man die Tabelle an die Richtge Stelle (z.B. Ende des Speichers) im Flash kriegt.

  10. #10
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    30.12.2008
    Beiträge
    1.418
    es soll am ende us erzeugen können und halt und beide sinus wellen müssen sich zum schluss aufheben wenn sie aufeinandertreffen. und auf eine der beiden wellen soll ein ton signal das von einem micro aufgenommen wird drauf modeliert werden. so das dort wo beide sich treffen der ton vom micro zu hören ist

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •