-         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 19 von 19

Thema: Hal-Sensor direkt oder mit Wiederstand an das Board?

  1. #11
    Benutzer Stammmitglied
    Registriert seit
    20.01.2008
    Beiträge
    40
    Anzeige

    habe den Code zum testen des Interrupt wie folgt umgeschrieben (erstmal ohne Drehzahlermittlung):
    Code:
      $regfile = "m32def.dat"  'z.B. RN-Control
      $framesize = 32
      $swstack = 32
      $hwstack = 32
      $crystal = 8000000                                        'Quarzfrequenz
      $baud = 9600
    
      Declare Sub Rnb_servo(byval Servonummer As Byte , Byval Position As Byte)
    
      Config Int0 = Rising                                      'Interrupt bei steigender Flanke
    
      On Int0 Irq0                                              'Festlegen wo bei externem Interrupt hin gesprungen wird
      Enable Int0                                               'Diesen Interrupt aktivieren
      Enable Interrupts  'Alle aktivierten Interrupts einschalten
      Do  'Endlosschleife
    
       Call Rnb_servo(1 , 1)
       Waitms 500
       'goto  IRQ0
      '$PROG &HFF,&HEF,&HD9,&H00' generated. Take care that the chip supports all fuse bytes.$PROG &HFF,&HEF,&HD9,&H00' generated. Take care that the chip supports all fuse bytes. Goto Irq0
      Loop
    
      Sub Rnb_servo(byval Servonummer As Byte , Byval Position As Byte)
       Print "#s" ; Chr(servonummer) ; Chr(position)
      End Sub
    
      End
    
      'Interrupt Routine wird immer ausgelöst wenn der Pegel von 0 auf 1 am
      'INT0 (Pin 18 PD2) Eingang wechselt
      Irq0:
       Call Rnb_servo(1 , 255)
       Waitms 1000
      Return

  2. #12
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    Hallo,

    also das ist keine gute Idee in der ISR den gleichen Befehl wie im Hauptprogramm aufzurufen. Denn was ist, wenn der IRQ genau dann auftritt, wenn der Print-Befehl von der Hauptschleife halb gesendet ist ?
    Und ein Wait in der ISR ist noch schlechter [-X

    Die ISR soll so schnell wie möglich wieder verlassen werden, hier max. eine Variable hochzählen und in der Hauptschleife auswerten.

  3. #13
    Neuer Benutzer Öfters hier
    Registriert seit
    24.02.2008
    Ort
    Wuppertal
    Beiträge
    5
    Heu HAL9999 & Dirk - HALL-Sensor an AVR

    Sicherheithalber ist ohnehin eine Pufferstufe anzuraten, dazu hier ein Schaltungskniff zur Anbindung HALL/AVR über 2-Draht - auch über mehrere Meter !
    HALL-Sensor TLE4905L : 1. Leitung ist der gemeinsamer GND; 2. Leitung von dem Versorgungs-Pin HALL an die Basis eines pnp (BC557) vorm AVR; output-Pin HALL mit 1k an diese Leitung; Emitter des pnp an +5V; 100 Ohm von Basis pnp an +5V; Kollektor pnp mit 10k nach GND; wenn der HALL per Magnet durchschaltet, geht der Kollektot nach high; ggf noch die Basis mit 22 Ohm in Reihe bei Kurzschluß schützen.

    mfg von cigarron

  4. #14
    Benutzer Stammmitglied
    Registriert seit
    20.01.2008
    Beiträge
    40
    vielen Dank für die Antworten. habe den code wie folgt verändert:
    Wait in ISP entfernt und nur schalter setzen... - leider ohne erfolg. Das servo zuckt immer noch nicht. Nur manchmal geht es eine sechstel umdrehung weiter - ist aber nicht davon abhängig, ob der magnet grade vorbei ging oder nicht. - ein sehr merkwürdiges verhalten. Mit dem Multimeter habe ich den Strom gemessen, der sich beim vorbeifahren des Magneten vom Output des Hallsensors verändert. Da scheint alles soweit in Ordnung zu sein. Also wenn der Magnet davor ist schaltet der Ausgang auf Low sodass eine Differenzspannung zu Plus und dem Ausgang in Höhe der eingegebenen Spannung (hier 12V) herrscht.

    Die für die vorgeschlagene Schaltung notwendigen Teile müsste ich erst noch bestellen - Ein weiterer Test mit der Schaltung kann daher also bis ende nächster Woche dauern.
    Code:
      $regfile = "m32def.dat"
      $framesize = 32
      $swstack = 32
      $hwstack = 32
      $crystal = 8000000                                        'Quarzfrequenz
      $baud = 9600
    
      Declare Sub Rnb_servo(byval Servonummer As Byte , Byval Position As Byte)
    
      Config Int0 = Low Level                                   'Interrupt bei steigender Flanke
      On Int0 Irq0                                              'Festlegen wo bei externem Interrupt hin gesprungen wird
      Enable Int0                                               'Diesen Interrupt aktivieren
      Enable Interrupts                                         'Alle aktivierten Interrupts einschalten
    
      Dim Irqschalter As Integer                                'Schalter für Interrupt definieren.
      Irqschalter = 0
    
      Do
        If Irqschalter = 0 Then
          Call Rnb_servo(1 , 1)
          Waitms 1000
        Else
          Call Rnb_servo(1 , 255)
          Waitms 1000
        End If
       'goto  IRQ0
       '$PROG &HFF,&HEF,&HD9,&H00' generated. Take care that the chip supports all fuse bytes. Goto Irq0
      Loop
    
      Sub Rnb_servo(byval Servonummer As Byte , Byval Position As Byte)
       Print "#s" ; Chr(servonummer) ; Chr(position)
      End Sub
    
      End
    
      Irq0:
       Irqschalter = 1
      Return

  5. #15
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    Hast Du mal statt dem Servo-Board den PC an die UART gehängt, was und ob da was gesendet wird ? Aber beachten das hier binäre Werte gesendet werden, die mit Ascii nicht unbedingt dagestellt werden können !

    Und Du musst den 'Schalter' Irqschalter irgendwann auch mal wieder zurücksetzen, sonst wird das ganze nur einmal geändert. Also beim ersten IRQ wird das 1 und bleibt dann so.

  6. #16
    Neuer Benutzer Öfters hier
    Registriert seit
    24.02.2008
    Ort
    Wuppertal
    Beiträge
    5
    Hui HAL9999 & Dirk - HALL an AVR

    Mein Laborbuch aus dem letzten Jahrhundert weist eine alternative Beschaltung mit TL172C (TO1 als Sensor aus. Der Widerstand am Hall ist dann mit 10k bemessen, an der Basis 220 Ohm nach +5V. Der pnp kann in beiden Fällen ein üblicher Universeller sein.

    Ich habe mir mit Absicht eine Funktionsbeschreibung verkniiffen - nur so weit: Im durchgeschalteten Zustand nehmen die Sensoren den 3- bis 4-fachen Strom auf - da fällt doch gleich der Cent.

    Notiert habe ich damals 2,7 / 10,7 mA bei TL 172C und 2,9 / 8,3 mA bei TLE 4905L.

    Der Daumen zum Erfolg zeigt nach oben, mfg cigarron

  7. #17
    Benutzer Stammmitglied
    Registriert seit
    20.01.2008
    Beiträge
    40
    @linux_80:
    der Test mit UART also RS232 hat bei diesem Code
    Code:
    $regfile = "m32def.dat"
    $framesize = 32
    $swstack = 32
    $hwstack = 32
    $crystal = 8000000                                        'Quarzfrequenz
    $baud = 9600
    
    Dim I As Byte
    I = 0
    do
          Print I ; "interrupt-wert=" ; Int0
          Waitms 1000
          Incr I
    loop
    immer das folgende resultat ergeben:
    31interrupt-wert=6
    32interrupt-wert=6
    usw...
    egal was ich mit dem INT0 gemacht habe. (Int0 mal an GND und mal an +5v mit einer Brücke verbunden - immer das gleiche.)

    @cigarron:
    was meinst Du mit der Widerstand am Hall 10k?
    - von wo nach wo soll der 10k gehen?
    und was ist beim Hallsensor die Basis? kenne Basis nur vom transistor.
    Der Hallsensor hat nur ein output-pin (u. natürlich GND sowie 5V+ )
    Eine Funktions bzw. Schaltplan wäre für mich als elektronik-laien ein große Hilfe. Es reicht natürlich auch in Textform ohne dass ms-paine oder ähnliches zu hilfe genommen wird.
    ------------
    Hat hier vielleicht irgend jemand einen Hallsensor m. open-collector an einem Interrupt (Int0) angeschlossen und kann hier die vorschaltung dafür veröffentlichen?

    Gruß
    Sascha

  8. #18
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    Hi,

    INT0 ist eine Konstante die den Wert 6 hat, deshalb steht da immer 6 !

    Der Ansatz von oben war ja nicht so schlecht, nur musst Du noch das beachten was ich oben schon mal erwähnt hab, sonst passiert nix.

  9. #19
    Benutzer Stammmitglied
    Registriert seit
    20.01.2008
    Beiträge
    40
    Hallo,
    es lag wohl am Servo-Code, dass es nicht funktioniert hat.
    Also jetzt funktioniert es undzwar mit einem 10k widerstand zwischen Q und +5v - die ISR wird bei jeder umdrehung aufgerufen. Super.
    Vielen vielen Dank an alle!
    Gruß
    Euer Sascha

Seite 2 von 2 ErsteErste 12

Berechtigungen

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