- SF800 Solar Speicher Tutorial         
Ergebnis 1 bis 10 von 13

Thema: Mega 8 für Intervallauslöser

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Benutzer Stammmitglied
    Registriert seit
    17.08.2005
    Ort
    Pegnitz
    Alter
    36
    Beiträge
    36

    Mega 8 für Intervallauslöser

    Hallo,

    ich beschäftige mich immer wieder mal mit dem Thema AVRs und deren Programmierung aber so ganz bin ich da noch nicht eingestiegen
    Nun da meine Prüfungen vorbei sind habe ich mir zwei Mega 8 besorgt und einen Kodierschalter dazu. Meine Herausforderung war es die Schaltstellung des Schalters ab zu fragen und dann einen Impuls in verschiedenen Abständen an einem Pin aus zu geben. Diesen "Intervallauslöser" brauche ich für Stop-Motion-Filme.
    Jetzt habe ich den Code im einfachsten Stil zusammengeschrieben und wollte das ganze testen aber der µC macht nur ein paar Zustandswechsel an der angeschlossenen LED und das war es dann. Würde sich da jemand mal erbarmen meinen Code anzusehen?

    Was mache ich falsch und warum dauert der Abstand zwischen den Intervallen nicht 1 Sekunde wenn ich sage Waitms 1000, was mache ich falsch ?

    Gruß Johannes

    Code:
    $regfile = "m8def.dat"                                      ' Konfiguration mit extrenem Quarz
    $crystal = 3686411
    $hwstack = 40
    $swstack = 16
    $framesize = 32
    
    
    Config Portc.4 = Output                                                                      'Das ist der Ausgang für den IR-Auslöser  
    Config Pind.0 = Input                                                                           'Mit PinD.0 -3 Werden die Pins des Codierschalters (PT65 303) verbunden
    Config Pind.1 = Input
    Config Pind.2 = Input
    Config Pind.3 = Input
    
    Pind.0 = 1                                                  'Internen Pull-Up Widerstand eingeschalten
    Pind.1 = 1
    Pind.2 = 1
    Pind.3 = 1
    Do
    
    If Pind.0 = 0 And Pind.1 = 0 And Pind.2 = 0 And Pind.3 = 0 Then       '0,5 Sekunden
    Waitms 20                                                   '20 ms um ein Prellen abzuwarten
    Portc.4 = 1
    Waitms 500
    Portc.4 = 0
    Waitms 30                                                   '30ms um dem Auslöser Zeit zu geben
    End If
    
    If Pind.0 = 1 And Pind.1 = 0 And Pind.2 = 0 And Pind.3 = 0 Then       '1 Sekunde
    Waitms 20
    Portc.4 = 1
    Waitms 1000
    Portc.4 = 0
    Waitms 30
    End If
    
    If Pind.0 = 0 And Pind.1 = 1 And Pind.2 = 0 And Pind.3 = 0 Then       '2 Sekunden
    Waitms 20
    Portc.4 = 1
    Waitms 2000
    Portc.4 = 0
    Waitms 30
    End If
    
    If Pind.0 = 1 And Pind.1 = 1 And Pind.2 = 0 And Pind.3 = 0 Then       '4 Sekunden
    Waitms 20
    Portc.4 = 1
    Waitms 4000
    Portc.4 = 0
    Waitms 30
    End If
    
    
    If Pind.0 = 0 And Pind.1 = 0 And Pind.2 = 1 And Pind.3 = 0 Then       '8 Sekunden
    Waitms 20
    Portc.4 = 1
    Wait 8
    Portc.4 = 0
    Waitms 30
    End If
    
    If Pind.0 = 1 And Pind.1 = 0 And Pind.2 = 1 And Pind.3 = 0 Then       '16 Sekunden
    Waitms 16
    Portc.4 = 1
    Wait 4
    Portc.4 = 0
    Waitms 30
    End If
    
    If Pind.0 = 0 And Pind.1 = 1 And Pind.2 = 1 And Pind.3 = 0 Then       '32 Sekunden
    Waitms 20
    Portc.4 = 1
    Wait 32
    Portc.4 = 0
    Waitms 30
    End If
    
    If Pind.0 = 1 And Pind.1 = 1 And Pind.2 = 1 And Pind.3 = 0 Then       '48 Sekunden
    Waitms 20
    Portc.4 = 1
    Wait 48
    Portc.4 = 0
    Waitms 30
    End If
    
    If Pind.0 = 0 And Pind.1 = 0 And Pind.2 = 0 And Pind.3 = 1 Then       '60 Sekunden
    Waitms 20
    Portc.4 = 1
    Wait 60
    Portc.4 = 0
    Waitms 30
    End If
    
    If Pind.0 = 1 And Pind.1 = 0 And Pind.2 = 0 And Pind.3 = 1 Then       '75 Sekunden
    Waitms 20
    Portc.4 = 1
    Wait 75
    Portc.4 = 0
    Waitms 30
    End If
    
    If Pind.0 = 0 And Pind.1 = 1 And Pind.2 = 0 And Pind.3 = 1 Then       '90 Sekunden
    Waitms 20
    Portc.4 = 1
    Wait 90
    Portc.4 = 0
    Waitms 30
    End If
    
    If Pind.0 = 1 And Pind.1 = 1 And Pind.2 = 0 And Pind.3 = 1 Then       '105 Sekunden
    Waitms 20
    Portc.4 = 1
    Wait 105
    Portc.4 = 0
    Waitms 30
    End If
    
    If Pind.0 = 0 And Pind.1 = 0 And Pind.2 = 1 And Pind.3 = 1 Then       '120 Sekunden
    Waitms 20
    Portc.4 = 1
    Wait 120
    Portc.4 = 0
    Waitms 30
    End If
    
    If Pind.0 = 1 And Pind.1 = 0 And Pind.2 = 0 And Pind.3 = 1 Then       '150 Sekunden
    Waitms 20
    Portc.4 = 1
    Wait 150
    Portc.4 = 0
    Waitms 30
    End If
    
    If Pind.0 = 0 And Pind.1 = 1 And Pind.2 = 1 And Pind.3 = 1 Then       '180 Sekunden
    Waitms 20
    Portc.4 = 1
    Wait 180
    Portc.4 = 0
    Waitms 30
    End If
    
    If Pind.0 = 1 And Pind.1 = 1 And Pind.2 = 1 And Pind.3 = 1 Then       '210 Sekunden
    Waitms 20
    Portc.4 = 1
    Wait 210
    Portc.4 = 0
    Waitms 30
    End If
    
    
    
    Loop
    End

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.715
    Blog-Einträge
    133
    Hallo,

    um den internen Pullup einzuschalten mußt Du Portd.0 = 1 und nicht Pind.0 = 1 schreiben!


    Äquivalent natürlich auch die anderen Pins.


    Wenn "waitms 1000" keine Sekunde ist, stimmt was nicht mit dem Takt, mit dem der Mega8 läuft. Quarz? Fuses? $CRYSTAL Angabe?


    Gruß
    Searcher
    Geändert von Searcher (08.07.2011 um 15:17 Uhr)
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    17.08.2005
    Ort
    Pegnitz
    Alter
    36
    Beiträge
    36
    Hi Searcher,

    ohh wieder was dazu gelernt gut ich werde es ändern.

    An dem µC habe ich ein 3,686411Mhz Quarz dran und jeweils an jedem Pin einen 22pF Kondensator dran.

    Klicke auf die Grafik für eine größere Ansicht

Name:	Fusebits.jpg
Hits:	9
Größe:	87,0 KB
ID:	19277

    So sieht es bei mir aus wenn ich die Fuses auslese. hab schon versucht ihn auf Ext. Crystal umzustellen aber dann scheiterts mit der Verbindung.

    Gruß Johannes

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.715
    Blog-Einträge
    133
    Hi,
    leider kenne ich das Programm nicht, mit dem Du die Fuses ausliest. Die Angabe von HIGH und LOW nach Lesen der Fuses mit jeweils 0x00 ist sehr unplausibel und kann eigentlich nicht stimmen. Da müßtest Du vor dem Fuse schreiben nochmal überprüfen, ob das richtig ausgelesen ist und mit den default Werten aus dem Datenblatt vergleichen.

    Wenn die Fuses noch nicht verändert worden sind, sollte der Mega8 mit 1MHz laufen. $crystal auf 1000000 sollte dann auch die Sekunde bei waitms 1000 bringen.

    Gruß
    Searcher
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    17.08.2005
    Ort
    Pegnitz
    Alter
    36
    Beiträge
    36
    Hi,
    das auslesen der Fuses hab ich mit AVR Studio 4 von Atmel gemacht.
    Einen Mega8 hab ich ja noch und der mySmartUSB light Progger dürfte nächste Woche auch eintreffen. Hoffentlich liegt es an meinem bisherigen http://cgi.ebay.de/USB-ISP-Programme...item5d2f6a7047 Adapter.

    Gruß Johannes

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.715
    Blog-Einträge
    133
    Einen Mega8 hab ich ja noch
    Glaubst Du der Mega8 wär defekt? Wahrscheinlich nicht! Programm läßt sich doch flashen? Vielleicht ist die Programmier/Auslesegeschwindigkeit für die Fuses zu hoch/niedrig. Kenne leider den Programmer und AVR Studio nicht.

    Bis das Problem gelöst ist kannst Du ja Dein Programm nochmal überarbeiten. Die Prellunterdrückung kommt mir da recht suspekt vor

    Die if Bedingung wird ausgewertet und danach erst die Prellzeit abgewartet aber dann nicht nochmal abgefragt sondern der portc.4 geschaltet. Was ist, wenn sich durch die Prellerei nochwas geändert hat bzw die 1. Auswertung nicht richtig war?

    Gruß
    Searcher
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.555
    Zitat Zitat von bebop Beitrag anzeigen
    Hi,
    das auslesen der Fuses hab ich mit AVR Studio 4 von Atmel gemacht.
    Einen Mega8 hab ich ja noch und der mySmartUSB light Progger dürfte nächste Woche auch eintreffen. Hoffentlich liegt es an meinem bisherigen http://cgi.ebay.de/USB-ISP-Programmer-ATMEL-AVR-ATmega-ATTiny-/400227463239?pt=Wissenschaftliche_Geräte&hash=item 5d2f6a7047 Adapter.

    Gruß Johannes
    Das sollte eigentlich sehr gut klappen, ABER Nach Umstellung der Takt Frequenz (wenn gelungen), muss eventuell die ISP Programmier Frequenz angepasst werden oder die Verbindung mit dem Chip passt nicht mehr. Da hatte ich als es mir noch unbekannt war, lange gesucht. Eine einfache logische und verständliche Erklärung dafür schein es nicht zu geben, diese Probleme treten immer wieder hier auf. Ich habe das mittlerweile schnell im Griff, aber auch nur durch Praktisches herumwurschteln in dem ich die ISP Frequenz Einstellung vom Minimum bis zum Max Möglichen erhöhe.

    Gruß Richard

Ähnliche Themen

  1. TWI zwichen mega 16 und mega 8
    Von rauf81 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 9
    Letzter Beitrag: 18.04.2011, 05:44
  2. Antworten: 3
    Letzter Beitrag: 03.12.2009, 18:36
  3. Controllerboard für Mega 16, Mega 32 und Mega 644
    Von Teslafan im Forum Konstruktion/CAD/3D-Druck/Sketchup und Platinenlayout Eagle & Fritzing u.a.
    Antworten: 4
    Letzter Beitrag: 02.05.2009, 00:01
  4. Wieviele Servos an den Mega 8 oder Mega 16 ?
    Von minium :) im Forum Elektronik
    Antworten: 4
    Letzter Beitrag: 06.10.2006, 18:03
  5. PB7 am Mega 128
    Von ceekay im Forum AVR Hardwarethemen
    Antworten: 4
    Letzter Beitrag: 22.07.2006, 23:07

Berechtigungen

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

LiFePO4 Speicher Test