/*
* ----------------------------------------------------------------------------
* "THE BEER-WARE LICENSE" (Revision 42):
* <joerg@FreeBSD.ORG> wrote this file. As long as you retain this notice you
* can do whatever you want with this stuff. If we meet some day, and you think
* this stuff is worth it, you can buy me a beer in return. Joerg Wunsch
* ----------------------------------------------------------------------------
*
* Simple AVR demonstration. Controls a LED that can be directly
* connected from OC1/OC1A to GND. The brightness of the LED is
* controlled with the PWM. After each period of the PWM, the PWM
* value is either incremented or decremented, that's all.
*
* $Id: demo.c,v 1.1 2002/09/30 18:16:07 troth Exp $
*/
#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include "a2d.c"
# define OC1 PB5
# define DDROC DDRD
# define OCR OCR1A
volatile uint16_t pwm;
volatile uint16_t freq;
volatile uint8_t direction;
SIGNAL (SIG_OVERFLOW1)
{
//OCR = pwm_min + ((pwm_scope/255)*pwm); /* Note [4] */
//ICR1=0x1000+(freq*24);
// Pulslängd ca 10ms gav bra respons
ICR1=10000;
//Försök att använda hela området på vridpot
//pwm_scope=(936/1024)*pwm;
//OCR=600+pwm_scope;
// Det som funka bäst
if(pwm*2<1536) // För att inte ge för lång pulstid till servot
OCR=600+(pwm*2);
// Försök med 8bit ad, 512*3=1536
//OCR=600+(pwm*3);
}
void
ioinit (void)
{
a2dInit(); // Initierar ADC
// Using phase & freq correct pwm, TOP=ICR1, freq scaling = 8
TCCR1A = _BV (COM1A1);
TCCR1B = _BV (CS11) | _BV (WGM13);
/* set PWM value to 0 */
OCR = 0;
ICR1 = 0;
/* enable OC1 and PB2 as output */
DDRD = _BV (OC1);
//DDRD= 0xFF;
timer_enable_int (_BV (TOIE1));
/* enable interrupts */
sei ();
}
int
main (void)
{
ioinit ();
while(1)
{
pwm=a2dConvert10bit(0);
freq=a2dConvert10bit(2);
}
return (0);
}
jag kollade med en multimeter och jag får något blinkade mellan 0 och 13
sedan råkade jag komma åt basen och kolektorn på 2n2222:an sammtidigt och då började motornn gå igång..
någon som har en aning om vad som kan vara fel?
[/code]
Jag är ingen j*vel på kod så jag tar väl en titt på hårdvaran.........
Jag skulle först mäta med ingångarna REV och FWD låga (nolla) och mäta lite här och var.....Sen mata FWD med 1:a å REV 0:a....å mäta. Därefter REV som 1:a och FWD 0:a........å mäta ännu mera...
Kolla om 2N2222:an är rätt kopplad......hm annars vet jag inte vad det kan vara för fel
Edit: Mät på kollektorn, basen och emittern ( på 2N2222:orna ) då ingångarna har de olika tillstånden enligt ovanstående beskrivning...
Hmm... du har alltså kopplat ett vanligt RC-servo till H-bryggan? Inte jätte konstigt att det inte funkar Testa med en vanlig DC motor... (liten DC motor that is) och se om det funkar bättre... samt försök felsöka ett bra tag innan du ger upp... samt försök förstå vad koden gör... och om den ens gör det du hade tänkt dig eller att den gör det som du behöver... (ser nämligen att du har kopierat koden av ngn snubbe)...
Skriv om den själv och försök förstå Tro mig... du vinner så mkt mer på det...
om du har en tillräckligt svag motor borde det inte vara nå problem att driva motorn konstant. Därmed skulle du kunna koppla rwd direkt till jord och sen fwd till +5V. Jag tror det är en farlig modell så koppla aldrig fwd och rwd till 5v samtidigt för då tror jag det blir kortslutning. PWM funktionen funkar ju inte då men du får iaf se om bryggan funkar som den ska. Om det funkar kan du ju börja se över koden lite
Virr3: Jag gissar att du matar basresistorerna med 5Volt för 1:a.
I(B(2N2222))=(5-1,4)V/1KOhm=3,6mA I(C(2N2222))= I(B)*hfe
hfe borde vara ca 200?........I(C(2N222))=720mA.. .........teoretiskt.......hmmm...det borde räcka gott o väl.
ojdå, ja REV skulle det ju stå däruppe, inte RWD. aja testa iaf endast hårdvaran först om det är möjligt, sen mjukvaran. Det är alltid bäst. Man ska begränsa möjligheterna till fel så mycket som möjligt
nunhar jag provat med en spänning på 3v istället..
inget händer nu häller...
kollade med en multimeter och det är ingen aktivitet över något av motstånden.. men om jag kollar mällan emittern och kolektorn på tip32:an så visar den ~200 med inställningen 2000m lik.. och mällan bas och kolektor ~10
på tip31:an så visar den mällan bas och kolektor 1-3 och mällan kollektor och emitter ~56
på 2n2222:an så är det ~-1750 mällan bas och kolektor och melllan kolektor och emitter så visar den 0-1
lite mätningar.. vill ni att jag ska kolla mer så säj till men jag hoppas att detta räcker..
Virr3: Jag undrar vad det är för mätvärden du nämner, jag hänger inte med riktigt.
Vad jag hade i tankarna var att du bör först kontrollera att 2N2222:an är korrekt kopplad i kretsen.........
Om du först låter ena 2N2222:an matas med en 0:a. Den andra 2N2222:an matas med en 1:a...då skall du mäta spänningen på basen på denna transistor.Den bör ligga nånstans mellan 1,3 V-1,6V om inte så är det nåt som är fel......Emittern på samma transitor bör ha en spänning på ca 0,6-0,8 V...........å kollektor spänningen bör vara kring 0,8-1,1 V. Sen gör du om proceduren för den andra 2N2222:an.