Sida 1 av 2
Problem med pic-baserad USB-enhet
Postat: 5 mars 2008, 21:46:04
av Roze
Tjo, nu ger jag upp, har försökt hur länge som heldst och med det mesta jag kan komma på. Försöker få igång en brygga mellan i2c och usb, men den vägrar fungera. hur jag än gör så säger datorn "ASYNC-error" efter ett tag.
Jag har testat i stort sett alla kombinationer av klock-inställningar och liknande, men det vägrar fixa sig, det enda som skiljer sig e längden det tar att få async.
PIC-processorn fortsätter köra, så den fastnar inte i någe interrupt som min lärare trodde från början.
Nån som har någe ide om vad som e fel?
Om nån känner för att titta lite på det kan jag skicka lr bifoga alla källfiler i ett senare skede.
Postat: 5 mars 2008, 22:05:20
av Micke_s
Det är inte så att i2c rutinerna är poll baserad?
Postat: 5 mars 2008, 22:36:05
av sodjan
Du kan ju börja med att beskriva det hela, så kanske någon kan svara...
Postat: 5 mars 2008, 23:06:21
av PHermansson
Ja en processormodell och ett schema vore trevligt. Annars så kan det ju vara som Micke_S säger, USB är tidskritiskt. Om man antar att du använder en PIC2550 tex så får du inte göra något som uppehåller processorn särskilt länge utan istället använda... vad det nu kallas... en state machine. Precis som de gör i exempelkoden alltså.
Postat: 6 mars 2008, 00:11:49
av Roze
Processorn är en PIC18F2550, och min interruptkod är väldigt liten, dock Main() är inte heller allt för omfattande och gör inte saker allt för ofta, tror jag, det enda jag kan tänka mig skulle kunna få USB att krasha pga att det tar för lång tid att utföra är själva I2C-kommunikationen, dvs, då den skickar / tar emot data.
http://roze.ridorana.se/bilder/main.png <-- Schematic
http://roze.ridorana.se/text.php?view=20 <-- interrupt-rutinen
http://roze.ridorana.se/text.php?view=31 <-- main + i2c-hanteraren
och ja, i2c-rutinerna är pollbaserade, iaf vad jag vet ^^, men de körs inte i interrupt, varpå usb borde få svar iaf
Postat: 6 mars 2008, 10:13:00
av PHermansson
Vad har du för värde på C4?
LED1 & 2 är felvända?
Varför finns D1?
Har du 100n avkoppling nära matningspinnarna?
Värde på C5 & C6?
Vilken uppgift har R1 & R2?
Har bara kollat lite snabbt på koden men du har en ganska lång loop:
Kod: Markera allt
USB_Restart = 0;
for(time1 = 0 ; time1 < 20 ; time1++){
for(time2 = 0 ; time2 < 65000 ; time2++);
ledpwr = !ledpwr;
}
Postat: 6 mars 2008, 12:26:37
av Roze
C4 vet jag inte riktigt, har inte förstått mig på hur man läser av det som står på wima-kondingar än, men det står 3n3K på den.
LED1 och LED2 är felvända för att jag råkade vända dem fel när jag satte dit dem som externt kort vid byggandet, och jag fann det enklare att ändra i koden än på kortet
D1 sitter där för att läraren sa att det behövdes ^^
C5 = 1µF, C6 = 2.2µF
R1 och R2 är hämtade ur PICens datablad, och skulle va där för att en Selfpowering USB-enhet skulle funka bra.
Loopen stod det var nödvändig för att vänta på att usb på dator-sidan skulle initiera. den ska vara minst 1.8s
Postat: 6 mars 2008, 13:12:09
av sodjan
> LED1 och LED2 är felvända för att jag råkade vända dem fel när jag satte dit
> dem som externt kort vid byggandet, och jag fann det enklare att ändra i
> koden än på kortet
Förklara hur en justering i koden kan vända två LED rätt igen !! Spännande...
Postat: 6 mars 2008, 13:20:06
av Andax
Kanske så att han menade att de är drivna så att anoden är kopplad upp till +5V via motstånd och katoden till I/O pinne. Dvs lyser när utgången är låg.
Istället för att koppla katoden via motstånd till jord och anoden till I/O så att den lyser när utgången är hög. (Förutsätter att I/O klarar driva tillräckligt i båda riktningarna)
Postat: 6 mars 2008, 13:21:05
av Roze
ops, hade råkat sätta en 5v där, my bad, ska va gnd
Postat: 6 mars 2008, 13:29:28
av PHermansson
C4 3n3? Ska vara 470n eller 220n om jag inte minns fel.
Ok då stämmer lysdioderna.
R1 & R2 får jag väl köpa, har inte testat self-powered...
D1 känner jag mig tveksam till, inget man brukar ha där.
C5 och C6 skulle jag bytt mot kanske 100u och 1u, kolla i 7805ans(?) datablad).
Postat: 6 mars 2008, 15:01:31
av Roze
måste dra och skaffa nya kondingar före jag kan testa det :/
Postat: 6 mars 2008, 16:02:38
av PHermansson
Det är nog en bra idé. Kollade lite och hittade bland annat detta:
Please note C5 is 470nF (the datasheet recommend 220nF but more is better) and should be low ESR (for example a multi-layer ceramic). Don't forget the 100nF decoupling caps.
C5 i det schemat motsvarar din C4.
http://electronicfr.com/index.php/Micro ... F2550.html
Postat: 14 juli 2008, 16:38:49
av Roze
Tjo, det var ett tag sen jag uppdaterade hur det gick, men nu behövs det ^^
Jag har fortfarande inte lyckats få igång detta. Jag har bytt konding och kristall, men usb-delen får fortfarande timeout. och I2C-delen kör fortfarande även fast usbn dör.
Här är hela källkoden för i2c-hub-projectet, både PC-sidan, Firmware och Schematic.
http://www.laun.se/files/hub.rar
Skulle bli jätteglad om någon ville kolla på dem.
//MVH
Ps. Schematic är inte helt korrekt, jag har inte uppdaterat det helt gentemot ändringar på kortet.
Postat: 14 juli 2008, 17:16:07
av sodjan
Oj, 92 filer...

Hoppas någon orkar igenom dom...
Får du USB-timeout om du stänger av I2C helt ?