Sida 1 av 3
Koppla microcontroller
Postat: 24 oktober 2006, 14:40:47
av BennyOrm
Hej,
följande program är bränt på en PIC16F873:
Vad gör programmet och hur koppplar man på en breadboard för att testa det?
Kod: Markera allt
#include <pic.h>
char dot, x;
main() {
TRISB=0x00;
while(1) {
dot=0x01;
for(x=0;x<8;x++) {
PORTB=dot;
dot=dot<<1;
}
}
}
Postat: 24 oktober 2006, 14:51:38
av Seven11
är detta en skoluppgift???? det verkar iaf så... och därför kommer jag inte ge dig något färdigt schema men jag kommer förklara lite kort hur det funkar så får du göra resten själv.
koppla upp PIC:en enligt vilken grundkoppling som helst + lysdioder kopplade (med strömbegrännsningsmotstånd) till varje pinne till PORTB. När du kör in programmet kommer du se att lysdiod #1 (på pinne PORTB.0) tänds därefter #2 (på pinne PORTB.1) och så håller det på till #8 (PORTB.7) för att sedan börja om med #1. Dock kommer det gå så snabbt så du ser det nog som om alla tänds samtidigt...
Postat: 24 oktober 2006, 15:07:02
av BennyOrm
Jag har gjort ett större projekt som jag vill testa på en breadboard, men måste först lite snabbt ta reda på hur ett enkelt program kan testas. Inget fusk alltså..
Med kondensatorer borde det gå att sakta ner förloppet så att det går att följa enklare väl?
Postat: 24 oktober 2006, 15:33:46
av Icecap
"Med kondensatorer borde det gå att sakta ner förloppet så att det går att följa enklare väl?"
Hur??? Om du kan sänka klockans hastighet nog kan du se de enkla stegen men om du ska göra det med en konding (om du använder RC-oscillator) eller hur beror ju på inställning, datablad osv. Jag har för mig att kondensatorn i en RC-klovka inte får vara för stor, alltså kan man öka motståndet istället.
Postat: 24 oktober 2006, 15:41:48
av björn
Varför inte bara göra det långsammare i mjukvaran?? Måste vara enklast.
Postat: 24 oktober 2006, 16:30:35
av sodjan
> Jag har gjort ett större projekt som jag vill testa på en breadboard,...
Och sen frågar du hur ett program med mindre än 10 rader fungerar ???
Kom igen...
Postat: 24 oktober 2006, 16:41:47
av BennyOrm
Ett ganska stort program i c som funkar bra och som jag ska lägga över på en microcontroller (som jag inte varit i kontakt med tidigare). Har inte koll på portar etc.. Konstig inställning här ifrån vissa..
Postat: 24 oktober 2006, 16:51:27
av JimmyAndersson
Du skulle nog få bättre svar om du berättade lite mer.
Du har alltså gjort ett stort projekt i C till en microcontroller. Rätt?
Hur har du lyckats med det utan att "ha koll på portar etc" ?
Postat: 24 oktober 2006, 17:04:21
av BennyOrm
Jag har programmerat en simulator för ett trafik-system i c som fungerar. Som utsignaler har jag vektorer som skrivs ut på skärmen. Nu ska jag överföra detta till en microcontroller och få utsignalerna som lysdioder istället. Därför la jag in ett litet exempel för att komma igång.
Postat: 24 oktober 2006, 17:08:26
av björn
Själv skriver jag aldrig särskilt många rader kod utan att deltesta imellan så att man inte gjort någon liten tabbe som sedan fortplantar sig i koden,
Och hur kan du skriva ett *större* program utan att veta hur portarna fungerar?
Vad är det annars för fel på förklaringarna som har kommit i tråden? Seven11 förklarade hur du skall koppla, och jag skrev en fortsättning som sade att det enklaste för att se vad som händer är att skta ner "koden".
Vad är det du inte förstår?
Postat: 24 oktober 2006, 17:11:21
av björn
BennyOrm skrev:Jag har programmerat en simulator för ett trafik-system i c som fungerar. Som utsignaler har jag vektorer som skrivs ut på skärmen. Nu ska jag överföra detta till en microcontroller och få utsignalerna som lysdioder istället. Därför la jag in ett litet exempel för att komma igång.
Alltså har du _inte_ programmerat microcontroller i C ännu? Ok, tur att du har fått svar på dina frågor änsålänge här då. Då är det bara till att fortsätta kämpa på.
Tänk på att C för PC och C för mikrokontroller skiljer extremt mycket, det enda som är likt är syntaxen.
EDIT: Syntaxen inte sydtaxen
Postat: 24 oktober 2006, 17:11:22
av JimmyAndersson
Nu blev det genast glasklart.
Läs databladet för PIC16F873 (speciellt sidorna om PORT och Device Overview.) Kika sedan på andra halvan i Seven11's inlägg igen. Har det inte blivit klarare då så är det bara att fråga.

Postat: 24 oktober 2006, 17:12:05
av BennyOrm
Inga fel förutom slodjans kommentar.. Det jag inte förstår är hur variablen dot skiftas (för det är väl det den gör?) samt hur man ska koppla det..
Postat: 24 oktober 2006, 17:15:29
av björn
Gör en vänsterskift ett steg, << betyder just "skifta vänster".
Googla texpå "C operator bitshift"
EDIT: om din byte ser ut 00000010 innan skiften kommer den at se ut som 00000100 efter skiften osv.
Postat: 24 oktober 2006, 17:23:09
av BennyOrm
Det är jag med på. Men betyder det att PORTB kommer vara först 0000 0001, sen 0000 0010 osv, och betyder det i sin tur att PORTB:s olika pins kommer ändras i enlighet med det (0000 0001 ger RB0=1 etc)??? Och kan jag då ha en lampa för varje pin så att ljuset kan "vandra"?? Eller är jag helt ute och cyklar?