- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 10 von 15

Thema: AT Mega 8 "stürzt nach 10-20sec ab" ?!?!?! Analogs

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    95
    Beiträge
    627
    Hallo,

    >Auch eine Falle beim Bascom sind die Einstellungen für Stack und Frame.
    Was sollte ich den da verändern? Hab damit noch nicht viel gemacht...Bild im Anhang.

    >Dim Sresult As String * 16 At &H64 Overlay
    >Dim Result(16) As Byte At &H64
    die beiden Zeilen habe ich zusammen mit der LCD Routine aus einem alten Programm "mit"-kopiert.... Jetzt habe ich beide rausgenommen

    >Baud
    nur soo, wollte "irgendwann" noch den PC vielleicht anschließen


    >Wenn ich mit LCD arbeite gehe ich hin uns setze einfach n Flag in der
    Interrupt serviceroutine, das der Timerevent eben erreicht wurde
    , verarbeite dann in der Mainloop die Ausgabe und lösche das Flag wieder.

    Kanst du mir da mal ein Beispiel geben Was ist ein nFlag? Und wie oft - so in etwa- wird das LCD dann aktualisiert?

    Code:
    'Beschleunigungsmesser mit AT MEGA 8 A/D Wandler
    
    'Version 0.1
    
    'MaxWerte???
    'Geschwindigkeit KM/h???
    'zurückgelegte KM???
    'Beschleunigung als Balkenanzeige??? XXXXXXXX | XXXXXXXX
    
    
    '-------------------------------------------------------------------------------
    'Konfiguration µC:
    
    $regfile = "m8def.dat"                                      'AT-Mega8
    $crystal = 1000000                                          'Quarz: 1 MHz   INTERN!!!
    $baud = 2400                                                'Baudrate der UART: 2400 Baud
    
    
    
    'Konfiguration LCD
    'Dim Sresult As String * 16 At &H64 Overlay
    'Dim Result(16) As Byte At &H64
    'LCD
    Config Lcd = 20 * 4
    Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.3 , Db6 = Portb.2 , Db7 = Portb.1 , E = Portd.7 , Rs = Portb.0
    Cursor Off Noblink                                          ' Cursor aus
    
    
    
    'Timer
    Config Timer1 = Timer , Prescale = 8                        '1.000.000Hz/64=125.000Hz
    Enable Timer1
    Timer1 = 34285                                              'Sofort Timer1-Überlauf (Bei 16 Bit: 65535+1=0)
    Enable Interrupts
    On Timer1 Ontimer1overflow                                  'Timer1-Interruptroutine deklarieren
    
    '-------------------------------------------------------------------------------
    'Ein- Ausgänge:
    Ddrb = &B11111111                                           '1 Ausgang, 0 Eingang = Pin PB7-0 als Ausgang
    Ddrc = &B0000000                                            '1 Ausgang, 0 Eingang = Pin PC6-0 als Eingang
    Ddrd = &B11111111                                           '1 Ausgang, 0 Eingang = Pin PD7-0 als Ausgang
    Portc = &B11111111                                          'PC0...PC7 auf High setzen
    
    
    '===============================================================================
    ' Variablen
    '===============================================================================
    Dim Taster_gedrueckt As Bit                                 'zum "entprellen" / Taster zur Menüwahl
    
    Dim Xout As Word                                            '=0-1023 vom Analogeingang
    Dim Yout As Word
    Dim Xout_mv As Word                                         'in milliVolt gewandelt
    Dim Yout_mv As Word
    Dim Xout_g1 As Single                                       'von mV in Zwischenrechung (Integer wegen den negativen Zahlen)
    Dim Yout_g1 As Single
    Dim Xout_g As Single                                        'von Zwischenrechung in g (Integer wegen den negativen Zahlen)
    Dim Yout_g As Single
    Dim Xout_ms As Single                                       'Umrechnung von g in m/s²
    Dim Yout_ms As Single
    
    'Anzeige
    Dim Anzeige As Byte                                         'zum Anzeige auswählen
    Dim Balken_x As Byte                                        'Balkenanzeige
    Dim Balken_y As Byte                                        'Balkenanzeige
    
    
    '-------------------------------------------------------------------------------
    'Programm:
    '-------------------------------------------------------------------------------
    'Start
    
    Anzeige = 1
    Start Adc
    
    
    Do
    
    'LCD wählen:
     If Pinc.5 = 1 Then
     Taster_gedrueckt = 0                                       'zum "entprellen"
     End If
    
     If Pinc.5 = 0 And Taster_gedrueckt = 0 Then                'Wenn Taster1 gedrückt wird = 0
     Anzeige = Anzeige + 1                                      'Variable "Anzeige" + 1
     Taster_gedrueckt = 1                                       'zum "entprellen"
     End If
    
     If Anzeige => 4 Then                                       'Wenn Variable "Anzeige" = > 4
     Anzeige = 1                                                'Variable "Anzeige" auf 1 setzen
     End If
    
    'Analogeingänge auslesen:
     Xout = Getadc(0)                                           'Wert aus Analogeingang laden
     Yout = Getadc(1)                                           'Wert aus Analogeingang laden
     '5000mV = 1023 ->  4,88758mV = 1
     '3300mV = 1023 ->  3,2258 mV = 1  Spannungsversorgung von g-Sensor
     '3000mV = 1023 ->  2,93255mV = 1
     Xout_mv = 4.88758 * Xout                                   'Xout_mV hat den Wert in mV!!!
     Yout_mv = 4.88758 * Yout                                   'Xout_mV hat den Wert in mV!!!
    
     Xout_g1 = Xout_mv - 1650
     Xout_g = Xout_g1 / 800
    
     Yout_g1 = Yout_mv - 1650
     Yout_g = Yout_g1 / 800
    
     Xout_ms = Xout_g * 9.80665                                 '1g = 9,80665m/s²
     Yout_ms = Yout_g * 9.80665
    
    
    'Balkenanzeige:
     Select Case Xout_mv
       Case Is < 450                                            'in mV
           Balken_x = 20                                        '0-20Balken für die Anzeige
     '  Case 510 To 451
     '      Balken_x = 19
     '  Case 570 To 511
     '      Balken_x = 18
     '  Case 630 To 571
     '      Balken_x = 17
     '  Case 690 To 631
     '      Balken_x = 16
     '  Case 750 To 691
     '      Balken_x = 15
     '  Case 810 To 751
     '      Balken_x = 14
     '  Case 870 To 811
     '      Balken_x = 13
     '  Case 930 To 871
     '      Balken_x = 12
     '  Case 990 To 931
     '      Balken_x = 11
     '  Case 1050 To 991
     '      Balken_x = 10
     '  Case 1110 To 1051
     '      Balken_x = 9
     '  Case 1170 To 1111
     '      Balken_x = 8
     '  Case 1230 To 1171
     '      Balken_x = 7
     '  Case 1290 To 1231
     '      Balken_x = 6
     '  Case 1350 To 1291
     '      Balken_x = 5
     '  Case 1410 To 1351
     '      Balken_x = 4
     '  Case 1470 To 1411
     '      Balken_x = 3
       Case 1530 To 1471
           Balken_x = 88
       Case 1590 To 1531
           Balken_x = 8
       Case 1591 To 1709
           Balken_x = 0
       Case 1710 To 1769
           Balken_x = 8
       Case 1770 To 1829
           Balken_x = 88
     '  Case 1830 To 1889
     '      Balken_x = 3
     '  Case 1890 To 1949
     '      Balken_x = 4
     '  Case 1950 To 2009
     '      Balken_x = 5
     '  Case 2010 To 2069
     '      Balken_x = 6
     '  Case 2070 To 2129
     '      Balken_x = 7
     '  Case 2130 To 2189
     '      Balken_x = 8
     '  Case 2190 To 2249
     '      Balken_x = 9
     '  Case 2250 To 2309
     '      Balken_x = 10
     '  Case 2310 To 2369
     '      Balken_x = 11
     '  Case 2370 To 2429
     '      Balken_x = 12
     '  Case 2430 To 2489
     '      Balken_x = 13
     '  Case 2490 To 2549
     '      Balken_x = 14
     '  Case 2550 To 2609
     '      Balken_x = 15
     '  Case 2610 To 2669
     '      Balken_x = 16
     '  Case 2670 To 2729
     '      Balken_x = 17
     '  Case 2730 To 2789
     '      Balken_x = 18
     '  Case 2790 To 2849
     '      Balken_x = 19
       Case Is > 2850
          Balken_x = 20
     End Select
    
    Loop
    
    
    
    
    
    '-------------------------------------------------------------------------------
    'Sprungmarken
    '-------------------------------------------------------------------------------
    Ontimer1overflow:                                           'Timer1-Interruptroutine
      Timer1 = 34285                                            'Nächster Überlauf soll in einer Viertel-Sekunde sein:
      Gosub Anzeige
    
    Return
    
    '------------------------------------------
    Anzeige:
    If Anzeige = 1 Then
    Gosub Anzeige1
    End If
    
    If Anzeige = 2 Then
    Gosub Anzeige2
    End If
    
    If Anzeige = 3 Then
    Gosub Anzeige3
    End If
    Return
    
    '------------------------------------------
    Anzeige1:
    Cls                                                         'Display löschen (IMMER ERST LCD LÖSCHEN UND DANN POSITION ANGEBEN!!!)
    Locate 1 , 1
    Lcd + Fusing(xout_g , "#.&&&") ; " g"
    Locate 1 , 10
    Lcd "|"
    Locate 1 , 11
    Lcd + Fusing(xout_ms , "##.&&") ; "m/s2"
    
    
    Locate 2 , 1
    Lcd + Fusing(yout_g , "#.&&&") ; " g"
    Locate 2 , 10
    Lcd "|"
    Locate 2 , 11
    Lcd + Fusing(yout_ms , "##.&&") ; "m/s2"
    
    Locate 3 , 1
    Lcd "12345678901234567890"                                  'nur als test
    
    Locate 4 , 1
    Lcd "12345678901234567(1)"                                  'nur als test
    Return
    
    '------------------------------------------
    Anzeige2:
    Cls
    Locate 1 , 1
    Lcd + Fusing(xout_g , "#.&&&") ; " g"
    Locate 1 , 10
    Lcd "|"
    Locate 1 , 11
    Lcd + Fusing(xout_ms , "##.&&") ; "m/s2"
    
    
    Locate 2 , 1
    Lcd + Str(xout_mv , "####.&&") ; "mV X-Achse"               'nur als test
    
    
    Locate 3 , 1
    Lcd + Fusing(yout_g , "#.&&&") ; " g"
    Locate 3 , 10
    Lcd "|"
    Locate 3 , 11
    Lcd + Fusing(yout_ms , "##.&&") ; "m/s2"
    
    
    Locate 4 , 1
    Lcd + Str(yout_mv , "####.&&") ; "mV Y-Achse"               'nur als test
    
    Locate 4 , 18
    Lcd "(2)"                                                   'nur als test
    Return
    
    '------------------------------------------
    Anzeige3:
    Cls
    Locate 1 , 1
    Lcd + Fusing(xout_g , "#.&&&") ; " g"
    Locate 1 , 10
    Lcd "|"
    Locate 1 , 11
    Lcd + Fusing(xout_ms , "##.&&") ; "m/s2"
    
    
    Locate 2 , 1
    Lcd + Str(balken_x , "####")                                'Balken als test
    
    
    Locate 3 , 1
    Lcd + Fusing(yout_g , "#.&&&") ; " g"
    Locate 3 , 10
    Lcd "|"
    Locate 3 , 11
    Lcd + Fusing(yout_ms , "##.&&") ; "m/s2"
    
    
    Locate 4 , 1
    Lcd + Str(yout_mv , "####.&&") ; "mV Y-Achse"               'nur als test
    
    Locate 4 , 18
    Lcd "(3)"                                                   'nur als test
    Return
    
    
    
    
    '===============================================================================
    'Pinbelegung µC     Beschleunigungsmesser
    '===============================================================================
    '                                         AT MEGA 8
    'PD0 =  RXD                               +---U---+
    'PD1 =  TXD                     Reset PC6 +1    28+ PC5 Taster1 Menüwechsel
    'PD2 =                          RXD   PD0 +2    27+ PC4 Taster2 MAX zurücksetzen
    'PD3 =                          TXD   PD1 +3    26+ PC3 Taster3
    'PD4 =                                PD2 +4    25+ PC2
    'PD5 =                                PD3 +5    24+ PC1 (ADC1) Y-OUT SENSOR
    'PD6 =                                PD4 +6    23+ PC0 (ADC0) X-OUT SENSOR
    'PD7 =  LCD / E                       Vcc +7    22+ GND
    'PB0 =  LCD / RS                      GND +8    21+ AREF
    'PB1 =  LCD / DB7            x x Xtal PB6 +9    20+ AVCC
    'PB2 =  LCD / DB6            x x Xtal PB7 +10   19+ PB5
    'PB3 =  LCD / DB5                     PD5 +11   18+ PB4 / LCD / DB4
    'PB4 =  LCD / DB4                     PD6 +12   17+ PB3 / LCD / DB5
    'PB5 =                     / LCD / E  PD7 +13   16+ PB2 / LCD / DB6
    'PB6 =                     / LCD / RS PB0 +14   15+ PB1 / LCD / DB7
    'PB7 =                                    +-------+
    'PC0 =  (ADC0) X-OUT SENSOR
    'PC1 =  (ADC1) Y-OUT SENSOR
    'PC2 =
    'PC3 =  Taster3
    'PC4 =  Taster2
    'PC5 =  Taster1 (MENÜ)
    'PC6 =  nur Taster auf Platine!!!
    'PC7 =
    
    '===============================================================================
    'Pinbelegung AM LCD!!!!!!! ACHTUNG!!!!!
    '===============================================================================
    'Pin 1: GND
    'Pin 2: +5V
    'Pin 3: Kontrast (kannste auf Masse legen, ist für 0-1v (0-5 auch ok)
    'Pin 4: RS  -> AVR
    'Pin 5: R/W -> GND (read/write mode, wir writen nur)
    'Pin 6: E   -> AVR
    'Pin 7-10:  -> GND
    'Pin 11-14: -> AVR -> 11=DB4 / 12=DB5 / 13=DB6 / 14=DB7
    'Pin 15-16: Beleuchtung, wenn drinne und gebraucht wird, sonst frei
    
    
    '===============================================================================
    'Anmerkungen
    '===============================================================================
    ' - Alle Taster schalten auf MASSE (keine Widerstände! nur software mäßige)
    ' - auch der Resettaster wird auf MASSE gelegt!!!
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken fusebit.jpg  

Berechtigungen

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

12V Akku bauen