Sida 2 av 3
Postat: 13 september 2005, 01:54:03
av frejo
Klart du kan fixa det i mjukvaran
Det du behöver göra är att skicka en pulsbreddsmodulerad signal till lysdioden. Dvs du skickar ett en snabb fyrkantspuls till lysdioden, så snabb att ögat inte hinner se blinkningarna. Sen ändrar du bara förhållandet mellan hur länge pulsen är +5v och hur länge den är 0v.
Det är samma princip som för att styra t.ex. rc-servon, så ta en titt här:
http://www.elektronikforumet.com/forum/ ... php?t=6311
Postat: 13 september 2005, 08:46:57
av speakman
Lite O/T iof, men du en intressant lösning på koden för att "släcka" varje bit.
Istället för att varje gång släcka föregående bit, och sedan tända nästa, så kan du ju bara sätta nästa värde med '=' så clearas ju föregående bit bort automatiskt.
Eller ännu enklare vore det att göra:
Kod: Markera allt
unsigned char n;
for(;;) {
for(n = 0; n < 7; n++) {
PORTB = 1 << n;
_delay_loop_2(pausetime);
}
}
Förstår att det bara är testkod, men kunde bara inte låta bli.
Mvh
speakman
Postat: 13 september 2005, 13:37:45
av MaggoT
Hehe, tack det var ju en aning smidigare faktiskt
Såhär blev koden för att köra fram och tillbaka:
(Har lagt in en kommentar med en fråga)
Kod: Markera allt
#include <avr/io.h>
#include <avr/delay.h>
#include <inttypes.h>
int main()
{
uint16_t pausetime;
pausetime = 7535;
DDRB = _BV(PB0) | _BV(PB1) | _BV(PB2) | _BV(PB3) | _BV(PB4) | _BV(PB5) | _BV(PB6) | _BV(PB7);
while(1)
{
unsigned char n;
for(n=0; n<7; n++)
{
PORTB = 1 <<n; // Vad gör denna rad? Vad betyder "<<" ?
_delay_loop_2(pausetime);
}
for(n=7; n>0; n--)
{
PORTB = 1 <<n;
_delay_loop_2(pausetime);
}
}
return(1);
}
frejo: Tack för tipset, men tyvärr är det rena grekiskan för mig :\ förstår inget av koden som postades där...
Angående problemet med att ha leds och parallellporten inkopplade samtidigt så har problemet kommit tillbaka. Jag kan inte ha leds inkopplade på PB5, PB6 och PB7 samtidigt som jag försöker köra in programmet, fast jag har flaggan -E noreset. Får följande felmeddelande:
Kod: Markera allt
avrdude: AVR Device not responding
avrdude: initialization failed, rc=-1
Double check the connections and try again, or use -F to override
this check.
avrdude done. Thank you.
Postat: 13 september 2005, 14:04:47
av Icecap
'y = 1 << x' betyder: 'y = 1 skiftat vänster x bit'
1 << 0 = 1 (00000001)
1 << 1 = 2 (00000010)
1 << 3 = 4 (00000100)
1 << 4 = 8 (00001000)
osv.
Postat: 13 september 2005, 15:09:50
av MaggoT
Ok, tack.
Har suttit med näsan i skärmen nu i timtal och letat efter en lättförståelig nybörjarguide till AVR och PWM, men inte lyckats hitta något som jag förstår mig på

Postat: 13 september 2005, 21:43:37
av frejo
Kan ju va så att det inte finns någon eftersom allting står i databladet.
Vet själv att jag hade lite problem i början men läser man bara databladet väldigt ingående ang. pwm-delen så står det exakt vilka register som ska ställas in.
När registrena sen har rätt värden går pwm-delen helt av sig själv.
edit:
hittade ett word-dokument där jag sammanställt registrena som man behöver pilla med, dom låg lite utspridda i databladet vilket gjorde det svårt att få en översikt.
Hit me
edit 2:
hittade även en pwm-demo som jag själv använt för att lära mig:
http://users.rcn.com/rneswold/avr/chexample.html
Postat: 14 september 2005, 00:22:03
av MaggoT
Tack så mycket! Skall läsa på och försöka prova mig fram

Postat: 14 september 2005, 20:05:37
av MaggoT
Verkar vara lite krångligt under linux.. har kompilerat om kärnan och fått /dev/parport0, men jag får bara "Device not responding". När jag pluggar kabeln i windows-laptopen fungerar dock allting ok så det verkar inte vara fel på kabeln..
Rättigheterna på /dev/parport0 är 666, dvs crw-rw-rw- så det borde heller inte vara något problem... Någon som har en aning?
Postat: 14 september 2005, 20:10:15
av Macce
Jag komplierade också om en ny kernel men orkar inte starta om datorn idag, får göra det imorrn och kolla om det fungerar för mig...

Postat: 14 september 2005, 20:15:24
av MaggoT
Okej, låt mig få veta hur det går

Postat: 14 september 2005, 21:09:21
av speakman
Låter som fel inställning i /etc/avrdude.conf tycker jag?
Funkar galant för mig.
Får du felet "device not responding" borde avrdude fått kontrollen över parallellporten iallafall.
Mvh
speakman
Postat: 14 september 2005, 21:22:47
av MaggoT
Precis vad jag funderade på.. dock vet jag inte vad som skulle vara fel..
Kommandot jag kör är:
avrdude -c bsd -p t2313
Har förövrigt inte ändrat någonting i avrdude.conf.
Kollade genom inställningarna för "bsd"-programmeraren, kopplingen stämmer bra med den jag byggt.. inställningarna för tiny2313 antar jag också att stämmer eftersom jag inte ändrat dom...
Postat: 14 september 2005, 21:59:09
av cykze
Koppla bort lysdioder och annat från SCK, MISO och MOSI, så att det bara är programmeraren som går till dessa tre pinnar.
Postat: 15 september 2005, 00:22:29
av MaggoT
Det är så jag har testat..
Endast +5v och GND från strömkällan, och GND, RESET, SCK, MISO, MOSI från paralellporten.. fungerar som sagt i windows men inte i linux.
Postat: 15 september 2005, 00:40:48
av cykze
Så du har inga lysdioder kopplade till dessa pinnar?
Har du provat under Windows på samma dator?