Forum: Mikrocontroller und Digitale Elektronik ICP mit Bascom (Pulslänge messen)


von gde (Gast)


Lesenswert?

Hallo .. wie kann ich denn den ICP port (liegt beim mega644 an pind.6) 
zum messen der pause zwischen 2 peaks benutzen ??
als eingangssignal kommt sowas :
[img]http://www.dyyyh.de/quadro/summensignal.jpg[/img]

weis nicht so recht wie ich das mit dem ICP in bascom programmieren kann

von gde (Gast)


Lesenswert?


von STK500-Besitzer (Gast)


Lesenswert?

Punkt 6.128 im Handbuch:
"Config Timer1"
Vielleicht hilft das. Sonst sollte das Datenblatt deines Controllers 
helfen können.

von gde (Gast)


Lesenswert?

im datenblatt find ich nichts sinnvolles...
irgednwie komm ich grad gar nicht weiter...
habe sowas gefunde:

Dim Puls(10) As Word                                        'Syncimpuls 
plus 9 Servos
Dim Kanal As Byte

Kanal = 1
      On Icp1 Messen Nosave                                 'Pulslänge 
messen mit ICP-Eingang
      On Ovf1 Kreset Nosave                                 'Kanalzähler 
rücksetzen

      Config Timer1 = Timer , Prescale = 1 , Capture Edge = Rising 
'rising oder falling anpassen an das Signal



      Enable Ovf1 
'Overflow-Interrupt
      Enable Icp1 
'Capture-Interrupt

      Enable Interrupts


Cursor Off
Cls

      Do
       Locate 1 , 1
       Lcd Puls(2) ; " " ; Puls(3) ; " " ; Puls(4) ; " "    'Puls(2) ist 
Kanal 1, Puls(3) ist Kanal 2 usw.
       Locate 2 , 1
       Lcd Puls(5) ; " " ; Puls(6) ; " " ; Puls(7) ; " " 
'Puls(x)=4000 entspricht 1ms, 8000 entspricht 2ms... (4 Mhz 
Prozessortakt)
      Loop

Messen:
      push r10
      push r11
      push r24
      push r25
      push r26
      push r27
      in r24,sreg
      push r24

      Puls(kanal) = Timer1
      Timer1 = 250000                                       'gilt für 4 
Mhz Prozessortakt  50000
      Incr Kanal

      pop r24
      !Out Sreg , R24
      pop r27
      pop r26
      pop r25
      pop r24
      pop r11
      pop r10

     Return


Kreset:
    push r24
    in r24,sreg
    push r24

    Kanal = 1

    pop r24
    !Out sreg,r24
    pop r24
   Return

End

aberverstehe nicht was das tut und funktionieren tuts auch nich,..
muss doch auch ohne assembler gehen ??

von bascom (Gast)


Lesenswert?


von STK500-Besitzer (Gast)


Lesenswert?

wichtigste BEtsnadteile für die ICP-Messung:

On Icp1 Messen Nosave 'wobei Nosave wohl dafür sorgt, dass keine 
Register
                      'gesichert werden ==> Handbuch!

Config Timer1 = Timer , Prescale = 1 , Capture Edge = Rising
                      'rising oder falling anpassen an das Signal


Enable Icp1
Messen:
.
.
W = Capture1
.
Return

Wenn du die Pausenlänge zwischen fallender und steigender Flanke messen 
willst, dann mußt du noch die Edge in der ISR umschalten.
Und solange du den Wertebereich des Timers nicht begrenzt (CTC-Mode 
o.ä.), kannst du die beiden Werte einfach voneinander subtrahieren.

von gde (Gast)


Lesenswert?

ok danke werd ich mal versuchen...

von gde (Gast)


Lesenswert?

wie hoch muss denn die spannung sein, damit er das signal erkennt...
hab grade festgestellt, das die peaks nur ca 2,1 V haben... das reicht 
nicht zum erkennen oder ?? muss man das hardwaretechnichs lösen ?? bzw 
wie geht das denn am einfachsten?? hab mosfetes und so da,,, weis nur 
net wie ich die da einbauen soll...

von STK500-Besitzer (Gast)


Lesenswert?

Du könntest den Analog-Komparator verwenden.

von humie (Gast)


Lesenswert?


Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.