Pomoc PIC 18F2550

Rasprava o PIC mikrokontrolerima, PIC projekti i drugo vezano za PIC-eve...

Moderators: pedja089, stojke369, [eDo], trax

User avatar
PRO_MILE
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 307
Joined: 14-05-2010, 16:52
Location: Srbija

Pomoc PIC 18F2550

Post by PRO_MILE »

Pozdrav,

Radim praktican primer iz knjige "Programiranje Mikrokontrolera PICBASIC-om" Vojo Milanovic.

Izgubio sam CD sa primerima i sad ne mogu da vidim kod celog programa. Ako bilo ko ima i moze da posalje bio bih mnogo zahvalan.


Konkretno radim 6.18.9 LCD Displej na USB Portu imam kod za PIC ali zelim da napisem program u VB.Net a ne u prevazidjeni VB6.



Hvala unapred!
Pozdrav!
User avatar
PRO_MILE
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 307
Joined: 14-05-2010, 16:52
Location: Srbija

Re: Pomoc PIC 18F2550

Post by PRO_MILE »

Uspeo sam da nadjem program prepravio sam ga i trebalo bi da radi ALI imam problem sa PIC 18F2550

Prvo sam ispisao kod iz knjige za PIC ali je imao greske prilikom kompajlovanja pa sam upacio u kodu

Code: Select all

 Include	"hid_desc.bas"	' Include the HID descriptors
Nakon toga je bilo uspesno kompajlovanje ali kad prikljucim preko USB windows kaze da ne prepoznaje uredjaj (Windows 10)

Onda sam dodao jos ovo:

Code: Select all

DEFINE USB_VENDORID    6017
        DEFINE USB_PRODUCTID   2000
        DEFINE USB_VERSION     1
        DEFINE USB_VENDORNAME  "Mile"
        DEFINE USB_PRODUCTNAME "USB Display"
        DEFINE USB_SERIAL      "00001"   
Ali ponovo kad prikljucim kaze da ne prepoznaje prikljucen uredjaj:

Evo ceo kod:

Code: Select all

'****************************************************************
'*  Name    : DisplayLCD.BAS                                    *
'*  Author  : [Mile]                                      *
'*  Notice  : Copyright (c) 2016 [by Mile]                *
'*          : All Rights Reserved                               *
'*  Date    : 01-Jul-16                                         *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
  
'Program za podrsku LCD displeja na USB portu
        Include	"hid_desc.bas"	' Include the HID descriptors
        
        DEFINE OSC 8
        
        Define LCD_DREG PORTB 'I/O port na kome je LCD-e
        define LCD_DBIT 4
        define LCD_RSREG PORTB
        define LCD_RSBIT 2 'Register select pin
        define LCD_EREG PORTB
        define LCD_EBIT 3 'Enable Pin
        define LCD_BITS 4 '4-bitni data bus
        define LCD_LINES 2 'LCD ima dva reda karaktera
        
        DEFINE USB_VENDORID    6017
        DEFINE USB_PRODUCTID   2000
        DEFINE USB_VERSION     1
        DEFINE USB_VENDORNAME  "Mile"
        DEFINE USB_PRODUCTNAME "USB Display"
        DEFINE USB_SERIAL      "00001"       
        
        USBBufferSizeMax Con 64 'Maksimalna velicina bafera
        USBBufferSizeTX con 64 'Ulazni
        USBBufferSizeRX con 64 'Izlazni
        
        'USB Baferi...
        USBBuffer var Byte[USBBufferSizeMax]
        USBBufferCount var Byte
        i var byte
        Red1 var byte[16]
        Red2 var byte[16]
        
        TRISB = $00 'Port B je izlazni
        ADCON1 = 15 'Svi pinovi su digitalni
        
        usbinit 'Inicijalizacija USB-a...
        
        ProgramStart:
        gosub DoUSBIn
        goto ProgramStart
        
        'Prijem podataka sa USB basa
        DoUSBIn:
            USBBufferCount = USBBufferSizeRX 'Velicina RX bafera
            USBService
            USBin 1, USBBuffer, USBBufferCount, DoUSBin 'Citanje podataka.
            
            If USBBuffer[0] = 253 and USBBuffer[1] = 1 Then
            For i = 2 To 17
            Red1 [i-2] = Usbbuffer[i]
            next
            Lcdout $fe, 1, STR Red1\16
            endif
            
            If USBBuffer[0] = 253 and USBBuffer[1] = 2 Then
            For i = 2 to 17
            Red2 [i-2] = Usbbuffer[i]
            next
            Lcdout $fe, $C0, STR Red2\16
            endif
            
            return
            
            'Slanje podataka sa USB-a
        DoUSBOut:
            USBBufferCount = USBBufferSizeTX ' Velicina TX Bafera
            USBService
            USBOut 1, USBBuffer, USBBufferCount, DoUSBOut 'Slanje podataka
            Return
            

Hvala unapred za pomoc!
User avatar
PRO_MILE
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 307
Joined: 14-05-2010, 16:52
Location: Srbija

Re: Pomoc PIC 18F2550

Post by PRO_MILE »

Pri ubacivanju hex fajla javljao mi se problem da ne moze ucitati konfiguraciju PIC-a, ja sam manuelno podesio da koristim 8MHz oscilator i sad ga windows prepoznaje.

Ali problem se nastavlja mislim da je greska u Kodu oko povezivanja sa USB-om.

Ovo ne valja:

Code: Select all

Include   "hid_desc.bas"   ' Include the HID descriptors
User avatar
PRO_MILE
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 307
Joined: 14-05-2010, 16:52
Location: Srbija

Re: Pomoc PIC 18F2550

Post by PRO_MILE »

Izvinjavam se sto pravim postove ali nemam opciju za editovanje postojeceg.


Posle celog dana napokon sam uspeo da osposobim displej.

Uradio sam EasyHID USB Wizard nakon toga otvorio projekat i dodao kod za display.
Ovako izgleda:

Code: Select all

' include the HID descriptor
include	"DESCDisplayLCDv4.bas"

DEFINE OSC 8
        
        Define LCD_DREG PORTB 'I/O port na kome je LCD-e  
        define LCD_DBIT 4
        define LCD_RSREG PORTB
        define LCD_RSBIT 2 'Register select pin
        define LCD_EREG PORTB
        define LCD_EBIT 3 'Enable Pin
        define LCD_BITS 4 '4-bitni data bus
        define LCD_LINES 2 'LCD ima dva reda karaktera
               
        USBBufferSizeMax Con 64 'Maksimalna velicina bafera
        USBBufferSizeTX con 64 'Ulazni
        USBBufferSizeRX con 64 'Izlazni
        
        'USB Baferi...
        USBBuffer var Byte[USBBufferSizeMax]
        USBBufferCount var Byte
        i var byte
        Red1 var byte[16]
        Red2 var byte[16]
        
        TRISB = $00 'Port B je izlazni
        ADCON1 = 15 'Svi pinovi su digitalni
        
        usbinit 'Inicijalizacija USB-a...
        
        ProgramStart:
        gosub DoUSBIn
        goto ProgramStart
        
        'Prijem podataka sa USB basa
        DoUSBIn:
            USBBufferCount = USBBufferSizeRX 'Velicina RX bafera
            USBService
            USBin 1, USBBuffer, USBBufferCount, DoUSBin 'Citanje podataka.
            
            If USBBuffer[0] = 253 and USBBuffer[1] = 1 Then
            For i = 2 To 17
            Red1 [i-2] = Usbbuffer[i]
            next
            Lcdout $fe, 1, STR Red1\16
            endif
            
            If USBBuffer[0] = 253 and USBBuffer[1] = 2 Then
            For i = 2 to 17
            Red2 [i-2] = Usbbuffer[i]
            next
            Lcdout $fe, $C0, STR Red2\16
            endif
            
            return
            
            'Slanje podataka sa USB-a
        DoUSBOut:
            USBBufferCount = USBBufferSizeTX ' Velicina TX Bafera
            USBService
            USBOut 1, USBBuffer, USBBufferCount, DoUSBOut 'Slanje podataka
            Return
I kad sam ubacivao HEX fajl na PIC Manuelno sam podesio

PLL Prescaler Selection bits: Divide by 2 (8 MHz oscillator input)

Oscillator Selection Bits: HS oscillator (HS) (4Mhz..25MHz)


Sve radi kako treba :ohno: :D


=============================================

Zelim samo jos nesto da pitam da li mogu umesto ovog trenutno LCD Displeja da stavim ovaj:

1. Trenutni: http://www.simonbramble.co.uk/downloads ... isplay.pdf
2. Ovaj da stavim: http://www.kelco.rs/katalog/images/1602_P.pdf

Koliko vidim moze, ali bih voleo da neko iskusniji potvrdi da ne kupujem za dzabe.



Pozdrav!
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7871
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: Pomoc PIC 18F2550

Post by pedja089 »

Jesi uspeo napraviti komunikaciju u VB .net?
Displej bi trebao da moze.
User avatar
PRO_MILE
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 307
Joined: 14-05-2010, 16:52
Location: Srbija

Re: Pomoc PIC 18F2550

Post by PRO_MILE »

Da radi, jos sam izvukao informacije od senzora za CPU Temp, GPU Temp, CPU Load, GPU Load i prenosim informacije na displej.


Samo mi je lepsi onaj plavi ekran sa plavim pozadinskim osvetljenjem, ali u svakom slucaju planiram da snimim kratak klip kako sve izgleda pa cu postaviti ovde sigurno.



Pozdrav!
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7871
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: Pomoc PIC 18F2550

Post by pedja089 »

Super.
User avatar
PRO_MILE
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 307
Joined: 14-05-2010, 16:52
Location: Srbija

Re: Pomoc PIC 18F2550

Post by PRO_MILE »

Imam problem/pitanje. Dopisao sam kod za 18F2550 i dodao 2 dugmeta na A portu 0 i 1.

Kod dodat za pic:

Code: Select all

DoUSBOut:
            USBBufferCount = USBBufferSizeTX ' Velicina TX Bafera
            USBService
            USBBuffer[0]=251
            
            Broj = 0
            
            If porta.0 = 1 then
            Broj=BROJ + 1
            endif
            
            If porta.1 = 1 then
            Broj=Broj + 2
            endif
            
            USBBuffer[1]=Broj
            
            USBOut 1, USBBuffer, USBBufferCount, DoUSBOut 'Slanje podataka
            Return

U VB.Net imam sledeci kod za citanje:

Code: Select all

 Public Sub OnRead(ByVal pHandle As Long) ' CITANJE SA USB-a

        If hidRead(pHandle, BufferIn(0)) Then

            Dugme = BufferIn(2)

            If Dugme = "1" Then
                txtDugme1.Text = "Dugme 2"
            ElseIf Dugme = "2" Then
                txtDugme1.Text = "Dugme 1"
            ElseIf Dugme = "3" Then
                txtDugme1.Text = "Nijedno"
            End If


        End If

    End Sub

E sad problem je u tome sto citanje radi samo u trenutnku kada posaljem nesto PIC-u. NP. saljem mu tekst za ekran i u tom trenutku drzim dugme i kliknem posalji on mi vraca samo tad povratnu informaciju koje dugme je pretisnuto. Kada samo pretiskam dugmice onda nece da posalje informacije PC-u.


Pomoc?
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7871
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: Pomoc PIC 18F2550

Post by pedja089 »

Daj ceo kod. DoUsbOut bi morao pozvati iz maina kad god se desi promena na tasterima.
Ako je kod iz ovog primera gore, on radi usbout samo kad primi nesto...
DoUSBIn:
USBBufferCount = USBBufferSizeRX 'Velicina RX bafera
USBService
USBin 1, USBBuffer, USBBufferCount, DoUSBin 'Citanje podataka.
I stalno vrti to dok ne dodje podatak.
Ti bi onda morao napraviti ovako nesto

Code: Select all

Main:
USBService
Call DoUSBIn
If tasteri stanje promenjeno then Call DoUSBOut
GOTO Main

 DoUSBIn:
            USBBufferCount = USBBufferSizeRX 'Velicina RX bafera
            USBin 1, USBBuffer, USBBufferCount, NemaDoUSBin 'Citanje podataka.
'ovde radi sta god sa podatcima
NemaDoUSBin:
RETURN
Ili druga opcija da stalno saljes stanje tastera, ali to po meni nije bas pametno...
User avatar
PRO_MILE
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 307
Joined: 14-05-2010, 16:52
Location: Srbija

Re: Pomoc PIC 18F2550

Post by PRO_MILE »

Evo ceo kod, kako bi trebao da izgleda da bi mi uvek javljao kad pretisnem dugme a ne samo kad nesto saljem?

Code: Select all

include	"DESCDisplayLCDv4.bas"

DEFINE OSC 8

BROJ var byte 'Pomocna promenljiva
        
        Define LCD_DREG PORTB 'I/O port na kome je LCD-e  
        define LCD_DBIT 4
        define LCD_RSREG PORTB
        define LCD_RSBIT 2 'Register select pin
        define LCD_EREG PORTB
        define LCD_EBIT 3 'Enable Pin
        define LCD_BITS 4 '4-bitni data bus
        define LCD_LINES 2 'LCD ima dva reda karaktera
               
        USBBufferSizeMax Con 64 'Maksimalna velicina bafera
        USBBufferSizeTX con 64 'Ulazni
        USBBufferSizeRX con 64 'Izlazni
        
        'USB Baferi...
        USBBuffer var Byte[USBBufferSizeMax]
        USBBufferCount var Byte
        i var byte
        Red1 var byte[16]
        Red2 var byte[16]
        
        TRISB = $00 'Port B je izlazni
        TRISA = $FF 'Port A je ulazni
        ADCON1 = 15 'Svi pinovi su digitalni
        
        usbinit 'Inicijalizacija USB-a...
        
        ProgramStart:
        gosub DoUSBIn
        gosub DoUSBOut
        goto ProgramStart
        
              
        'Prijem podataka sa USB basa
        DoUSBIn:
            USBBufferCount = USBBufferSizeRX 'Velicina RX bafera
            USBService
            USBin 1, USBBuffer, USBBufferCount, DoUSBin 'Citanje podataka.
            
            If USBBuffer[0] = 253 and USBBuffer[1] = 1 Then
            For i = 2 To 17
            Red1 [i-2] = Usbbuffer[i]
            next
            Lcdout $fe, 1, STR Red1\16
            endif
            
            If USBBuffer[0] = 253 and USBBuffer[1] = 2 Then
            For i = 2 to 17
            Red2 [i-2] = Usbbuffer[i]
            next
            Lcdout $fe, $C0, STR Red2\16
            endif
            
            return
            
                  
            'Slanje podataka sa USB-a
        DoUSBOut:
            USBBufferCount = USBBufferSizeTX ' Velicina TX Bafera
            USBService
            USBBuffer[0]=251
            
            Broj = 0
            
            If porta.0 = 1 then
            Broj=BROJ + 1
            endif
            
            If porta.1 = 1 then
            Broj=Broj + 2
            endif
            
            USBBuffer[1]=Broj
            
            USBOut 1, USBBuffer, USBBufferCount, DoUSBOut 'Slanje podataka
            Return
 
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7871
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: Pomoc PIC 18F2550

Post by pedja089 »

Bas kao ovaj gore primer sto sam ti napisao...
User avatar
PRO_MILE
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 307
Joined: 14-05-2010, 16:52
Location: Srbija

Re: Pomoc PIC 18F2550

Post by PRO_MILE »

hmm probao sam prvo tvoju preporuku ali izgleda da negde gresim posto idalje ne mogu da napravim da se odma javi nakon dugmeta. Ako ti nije problem da izmenis moj kod pretpostavljam da nema mnogo posla. A svakako bi mi mnogo znacilo!



Pozdrav!
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7871
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: Pomoc PIC 18F2550

Post by pedja089 »

Prvo napravi da ti se led pali na pritisak bilo kojeg tastera.
I onda tu ubaci poziv DoUsbOut...
User avatar
PRO_MILE
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 307
Joined: 14-05-2010, 16:52
Location: Srbija

Re: Pomoc PIC 18F2550

Post by PRO_MILE »

Ja sam ovako postavio ali ne radi:

Code: Select all

' ************************************************************
' * Auto generated EasyHID file. PBP 2.60 and above          *
' ************************************************************

' include the HID descriptor
include	"DESCDisplayLCDv4.bas"

DEFINE OSC 8

BROJ var byte 'Pomocna promenljiva
        
        Define LCD_DREG PORTB 'I/O port na kome je LCD-e  
        define LCD_DBIT 4
        define LCD_RSREG PORTB
        define LCD_RSBIT 2 'Register select pin
        define LCD_EREG PORTB
        define LCD_EBIT 3 'Enable Pin
        define LCD_BITS 4 '4-bitni data bus
        define LCD_LINES 2 'LCD ima dva reda karaktera
               
        USBBufferSizeMax Con 64 'Maksimalna velicina bafera
        USBBufferSizeTX con 64 'Ulazni
        USBBufferSizeRX con 64 'Izlazni
        
        'USB Baferi...
        USBBuffer var Byte[USBBufferSizeMax]
        USBBufferCount var Byte
        i var byte
        Red1 var byte[16]
        Red2 var byte[16]
        
        TRISB = $00 'Port B je izlazni
        TRISA = $FF 'Port A je ulazni
        ADCON1 = 15 'Svi pinovi su digitalni
        
        usbinit 'Inicijalizacija USB-a...
        
        ProgramStart:
        gosub DoUSBIn
        gosub DoUSBOut
        goto ProgramStart
        
        If porta.0 = 0 then Call DoUSBOut
        
        GoTO ProgramStart
        
        'Prijem podataka sa USB basa
        DoUSBIn:
            USBBufferCount = USBBufferSizeRX 'Velicina RX bafera
            USBService
            USBin 1, USBBuffer, USBBufferCount, DoUSBin 'Citanje podataka.
            
            If USBBuffer[0] = 253 and USBBuffer[1] = 1 Then
            For i = 2 To 17
            Red1 [i-2] = Usbbuffer[i]
            next
            Lcdout $fe, 1, STR Red1\16
            endif
            
            If USBBuffer[0] = 253 and USBBuffer[1] = 2 Then
            For i = 2 to 17
            Red2 [i-2] = Usbbuffer[i]
            next
            Lcdout $fe, $C0, STR Red2\16
            endif
            
            return
            
                  
            'Slanje podataka sa USB-a
        DoUSBOut:
            USBBufferCount = USBBufferSizeTX ' Velicina TX Bafera
            USBService
            USBBuffer[0]=251
            
            Broj = 0
            
            If porta.0 = 1 then
            Broj=BROJ + 1
            endif
            
            If porta.1 = 1 then
            Broj=Broj + 2
            endif
            
            USBBuffer[1]=Broj
            
            USBOut 1, USBBuffer, USBBufferCount, DoUSBOut 'Slanje podataka
            Return
 
Ako ti nije problem dodaj mi kako treba ili bar pocetak koda za slanje kad pretisnem dugme posto me to buni.


Pozdrav!
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7871
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: Pomoc PIC 18F2550

Post by pedja089 »

Dosta stvari nije ok...
Prvo

Code: Select all

        ProgramStart:
        gosub DoUSBIn
        gosub DoUSBOut
        goto ProgramStart
       
        If porta.0 = 0 then Call DoUSBOut <ovo se nikad ne izvrsi....
       
        GoTO ProgramStart <a ni ovo
Drugo:
Pogledaj moj DoUsbIn,pogledaj tvoj

Moj:
DoUSBIn:
USBBufferCount = USBBufferSizeRX 'Velicina RX bafera
USBin 1, USBBuffer, USBBufferCount, NemaDoUSBin 'Citanje podataka.
'ovde radi sta god sa podatcima
NemaDoUSBin:
RETURN

Tvoj:
DoUSBIn:
USBBufferCount = USBBufferSizeRX 'Velicina RX bafera
USBService
USBin 1, USBBuffer, USBBufferCount, DoUSBin 'Citanje podataka.

Za detekciju pritiska tastera, vrni se na kurs i potrazi neki primer brojaca ili slicno...
Rekoh ti, batali usb, napravi prvo da ti se jedna led upali na sekundu samo kada stisnes bilo koji od tastera koji te zanimaju. Pa ces taj kod spojiti sa usb posle...
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7871
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: Pomoc PIC 18F2550

Post by pedja089 »

Uspeo sta?
User avatar
PRO_MILE
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 307
Joined: 14-05-2010, 16:52
Location: Srbija

Re: Pomoc PIC 18F2550

Post by PRO_MILE »

Izvini nisam javio. Jos tad sam uspeo i osposobio sam ga da radi na 2 dugmeta pa sam imao obaveze neke ovih dana i evo opet sedoh da napisem kod za ceo PortA i app za win.

Sve radi kako treba!


Danas dok sam pisao kod za ove preostale dugmice dobio sam ideju da ubacim EEPROM u kome cu da upisem broj od 5 karaktera preko USB-a i onda kad skinem USB i upisem taj broj preko dugmica da se ispise na ekranu da je sifra tacna. Ali tek trebam da krenem to da radim ako zapnem zovem za pomoc :D :ohno:




Pozdrav i hvala!
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7871
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: Pomoc PIC 18F2550

Post by pedja089 »

Drago mi je da ide :)
User avatar
PRO_MILE
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 307
Joined: 14-05-2010, 16:52
Location: Srbija

Re: Pomoc PIC 18F2550

Post by PRO_MILE »

Zavrsiao sam uspesno upisivanje ispisivanje sa PC-a u EEPROM. :D

Zeleo bi da stavim senzor za temp. LM75A ali su mi SCL i SDA portovi vec zauzeti sa EEPROM 24C64. Da li postoji mogucnost da oba povezem?


Pozdrav!
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7871
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: Pomoc PIC 18F2550

Post by pedja089 »

A sto ne bi moglo...
To i jeste poenta I2C...
Post Reply