Forum: Mikrocontroller und Digitale Elektronik PIC18F14k50 USB & Sleep will nicht -> Expertenrat gesucht


von DerRächerMitDemBecher (Gast)


Lesenswert?

Hallo Leute,

Will bei einem PIc18F14k50 den USB Interruptbetrieb und den Sleep mode 
gmeinsam nutzen.
Leider funktioniert das nicht so richtig. Hier mein Quellcode:

sub procedure Interrupt()
   USB_Interrupt_Proc()
   if (HID_Read() > 0) then
      Led = 1
      if CheckSystemCommand = 0 then
         Read_Sht
         Convert_Data_to_text
      end if
      while(HID_Write(@USB_writebuf,42) = 0)
         NOP
      wend
      Led = 0
   end if

end sub

main:
  InitConfig 'Set input,Outputs,...
  ReadEEpromDatas 'Offsets,serial,...
  HID_Enable(@USB_readbuf,@USB_writebuf)
  delay_ms(1500)
  Led = 0

  while TRUE
    sleep
    nop  'Some Operations to starting up the OSC
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
  wend


Weis jemand, wie ich das Problem umgehen kann?

von Potter (Gast)


Lesenswert?

Nimm ein lauffähiges Projekt von Microchip und hangel dich durch.

Was für eine Programmiersprache verwendest Du da?

Gruß Potter

von DerRächerMitDemBecher (Gast)


Lesenswert?

Das ist Mikrobasic.
Leider finde ich nichts vergleichbares :-(

von Stefan (Gast)


Lesenswert?

Du setzt keine Bedinngung, wenn er aus
dem Sleepmodus aufwachen soll.
So bleibt er immer im Sleep Modus.

von DerRächerMitDemBecher (Gast)


Lesenswert?

Bedingung wird schon gesetzt.

Sub Procedure InitConfig
    Intcon.GIE = 0 'All Interrupts off
    ADCON0 = 0
    ADCON1 = 0
    ANSEL = 0
    ANSELH = 0
    CCP1CON = 0
    RCON.IPEN = 0 'Disable Interrupt priority
    INTCON.PEIE = 1  'PIR is on
    INTCON2.rabpu = 1 'Pullups disabled
    PIE2.USBIE = 1    'Enable USB Interrupt

    'Pins, that will be always high:
    PortC.5 = 1 'Dummy Pin
    TrisC.5 = 0 'Dummy Pin
    PortC.7 = 1 'Led
    TrisC.7 = 0 'Led
    PortB.7 = 1 'Vdd from SHT
    TrisB.7 = 0 'Vdd from SHT

    'Pins, taht will be always low:
    PortC.4 = 0 'Dummy Pin
    TrisC.4 = 0 'Dummy Pin
    PortC.3 = 0 'Dummy Pin
    TrisC.3 = 0 'Dummy Pin
    PortC.6 = 0 'Dummy Pin
    TrisC.6 = 0 'Dummy Pin
    PortC.0 = 0 'Dummy Pin
    TrisC.0 = 0 'Dummy Pin
    PortC.1 = 0 'Dummy Pin
    TrisC.1 = 0 'Dummy Pin
    PortC.2 = 0 'Dummy Pin
    TrisC.2 = 0 'Dummy Pin
    PortB.4 = 0 'Dummy Pin
    TrisB.4 = 0 'Dummy Pin

    'Pins that would be an Input
    TrisB.5 = 1
    TrisB.6 = 1

    Intcon.GIE = 1 'Enables Global Interrupt
end sub

Wegen dem funktioniert es noch immer nicht :-(

von DerRächerMitDemBecher (Gast)


Lesenswert?

Habe folgendes Dokument studiert: 
http://ww1.microchip.com/downloads/en/AppNotes/00950b.pdf

Aber leider funktioniert das auch nicht :-(

von DerRächerMitDemBecher (Gast)


Lesenswert?

Funktioniert :-D

while TRUE
    Pir2.USBIE = 1 'Set the Interrupt on
    UIE.SOFIE = 1  'Set the Interrupt on
    OSCCON.IDLEN = 1 'Switch to internal Oscillator
    sleep
    nop  'Some Operations to starting up the OSC
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
  wend

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.