Buggfix Plus
Aktuellt datum och tid: 05.56 2018-09-23

Alla tidsangivelser är UTC + 1 timme




Svara på tråd  [ 68 inlägg ]  Gå till sida Föregående  1, 2, 3, 4, 5  Nästa
Författare Meddelande
InläggPostat: 16.20 2018-02-24 
EF Sponsor
Användarvisningsbild

Blev medlem: 17.53 2010-01-04
Inlägg: 4692
Ort: Skogen mellan Uppsala-Gävle
Skulle vilja lägga upp layouten men vet inte hur jag ska göra för att det inte ska bli rörigt.

Nedan är en bild på "det väsentliga". VIN och EN är sammandragna. 100n mellan SW och BOOT, 22nF på SS. Feedbacken fungerar antar jag då den reglerar fint till 6V.

Bilaga:
layout.JPG


Logga in för att visa de filer som bifogats till detta inlägg.


Upp
 Profil  
 
InläggPostat: 16.33 2018-02-24 
Användarvisningsbild

Blev medlem: 22.31 2004-01-30
Inlägg: 930
Ort: Uppsala, Sweden
Ja nära C7 borde du ha en rejält högre kapacitans med låg ESR. Går nog att patcha in utan allt för mycket meck.


Upp
 Profil  
 
InläggPostat: 16.59 2018-02-24 

Blev medlem: 14.43 2007-06-14
Inlägg: 3821
Ort: Hälsingland
Ja var och hur långt bort sitter kondensatorerna på ingången?
De bör som som sagt sitta åtminstone några uF nära ingången, några millimeter helst.

Feedbacken ska du ta direkt från utgångskondensatorn och inte induktansen.

Jag hade tagit bort allt onödigt först, tex D3, mer kapacitans på ingången och dra om feedbacken till kondensatorn.
Sen bör du mäta med oscillioskop på ingången, feedbacken, visa gärna bild på hur det ser ut med och utan last.


Upp
 Profil  
 
InläggPostat: 20.57 2018-02-24 
EF Sponsor
Användarvisningsbild

Blev medlem: 17.53 2010-01-04
Inlägg: 4692
Ort: Skogen mellan Uppsala-Gävle
Dom är för långt borta :)

Ok. Nu har jag dragit en ny tråd från utgångskondingen direkt till feedbacken. Kapade den gamla ledningen. D3 är borta. 10uF sitter på ingången.
Utan last ser det verkligen superfint ut men nedan ser ni hur det ser ut med ett 47Ω-motstånd som belastar på utgången...

Bilaga:
NewFile2.jpg


Logga in för att visa de filer som bifogats till detta inlägg.


Upp
 Profil  
 
InläggPostat: 21.58 2018-02-25 
EF Sponsor
Användarvisningsbild

Blev medlem: 17.53 2010-01-04
Inlägg: 4692
Ort: Skogen mellan Uppsala-Gävle
Löst!! :whoho:

Det är alltid roligt att få ge lite feedback. Tyvärr inget jättespännande men ändå.
Har suttit några timmar och jämfört med databladet och kunde verkligen inte hitta något fel. Eller jo, ni har påvisat flera designfel och dom suger jag åt mig som en svamp.

Denna IC var den första komponenten någonsin jag lödde med hetluftstationen och antagligen eldade jag alldeles för länge. Antingen det eller så skadade jag den när jag hade ett så litet motstånd för att ställa frekvensen.
Oavsett så lödde jag precis bort regulatorn och fick dit en ny och nu funkar kortet precis som tänkt! Regulatorn orkar gott och väl med servo.
Ja, så glad så jag inte ens kan skriva begriplig svenska, men förhoppningsvis förstår ni vad inlägget handlar om :)

Tack för all hjälp så länge! Fortfarande lite programmering kvar men nu fungerar hårdvaran som den ska i alla fall. :tumupp:


Upp
 Profil  
 
InläggPostat: 22.00 2018-02-25 
Användarvisningsbild

Blev medlem: 22.31 2004-01-30
Inlägg: 930
Ort: Uppsala, Sweden
Weeeeee, ja den såg jag inte :D :oops:
Snyggt jobbat!


Upp
 Profil  
 
InläggPostat: 16.01 2018-02-26 

Blev medlem: 14.43 2007-06-14
Inlägg: 3821
Ort: Hälsingland
Bra! Du ser, inte så svårt med switchat ändå. ;)


Upp
 Profil  
 
InläggPostat: 17.58 2018-02-26 
EF Sponsor
Användarvisningsbild

Blev medlem: 17.53 2010-01-04
Inlägg: 4692
Ort: Skogen mellan Uppsala-Gävle
Hehe, ja ja :wink:
Men man får lite dåligt samvete när man ber om hjälp med något och ni vet inte hela bakgrunden. Lite som att säga A utan att säga B. Ber om ursäkt för det.


Upp
 Profil  
 
InläggPostat: 17.39 2018-03-04 
EF Sponsor
Användarvisningsbild

Blev medlem: 17.53 2010-01-04
Inlägg: 4692
Ort: Skogen mellan Uppsala-Gävle
Kör vidare i den här tråden med lite programmeringshjälp.

Hela programmet ser ut som nedan. Det jag inte får till är den analoga avläsningen och misstänker jag rör till det med storlek på variabler och annat.
Koden går ut på att jag har en default-puls ut till servot som sedan modifieras med att lägga på ett värde.
Det görs här i while-loopen -> ActiveServoPositionPulse = ServoPositionOpen + ServoPositionOpenCal;
Jag har bekräftat att calState är aktivt under dom två första minutrarna genom att kommentera bort den nuvarande koden och ge ServoPositionOpenCal ett fast värde.

Så egentligen är det
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
  1. ServoPositionOpenCal = analogRead(SERVO_OPEN_PIN);
  2. ServoPositionOpenCal = (ServoPositionOpenCal >> 6) & 0xF;
som jag tror inte gör som jag vill.
Här vill jag alltså läsa in dom 10 bitarna från ADC:n, minska upplösningen till ett värde mellan 0-15 och sedan skriva detta nya värde till ServoPositionOpenCal.
Ser ni något uppenbart fel? Jag trodde först att jag hittat felet då variablen bara var en uint8, men det tycks inte bli bättre nu när den är 16 bitar.

Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
  1. #include <avr/io.h>
  2. #include <avr/interrupt.h>
  3. #include <util/delay.h>
  4.  
  5. #define F_CPU 8000000UL
  6. #define SERVO_PORT PORTB
  7. #define SERVO_CMD_PIN PB0
  8. #define SERVO_CLOSE_PIN PB3
  9. #define SERVO_OPEN_PIN PB4
  10. #define RADIO_OPEN_PIN PB1
  11. #define RADIO_CLOSE_PIN PB2
  12. #define SERVO_FREQ 11 //Högre siffra ger lägre frekvens
  13.  
  14.  
  15. volatile uint8_t freqCounter = 0;
  16. volatile uint16_t calCounter = 0;
  17. volatile uint8_t calState = 1;
  18. volatile uint8_t ServoPositionClose = 150;
  19. uint16_t ServoPositionCloseCal = 0;
  20. volatile uint8_t ServoPositionOpen = 146;
  21. uint16_t ServoPositionOpenCal = 0;
  22. uint8_t ActiveServoPositionPulse = 148; // 161 = 1500us, 135 = 1900us
  23.  
  24. static inline void initTimer1(void)
  25. {
  26.   TCCR1 |= (1 << CTC1);  // clear timer on compare match
  27.   TCCR1 |= (1 << CS13); // | (1 << CS11) | (1 << CS10); //clock prescaler
  28.   OCR1C = 255; // compare match value
  29.   TIMSK |= (1 << OCIE1A); // enable compare match interrupt
  30. }
  31.  
  32. ISR(TIMER1_COMPA_vect)
  33. {
  34.         freqCounter++;
  35.        
  36.         if(calState){
  37.           calCounter++;
  38.    
  39.           if(calCounter >= 0xFFFF){
  40.               calState = 0;
  41.           }
  42.         }        
  43.         if(freqCounter == SERVO_FREQ){
  44.             SERVO_PORT |= (1<<SERVO_CMD_PIN);
  45.             OCR1C = 255 - ActiveServoPositionPulse;
  46.         }
  47.         if(freqCounter > SERVO_FREQ){
  48.             SERVO_PORT &= ~(1<<SERVO_CMD_PIN);
  49.             freqCounter = 0;
  50.             OCR1C = 105;
  51.         }
  52.  
  53. }
  54.  
  55. int main(void)
  56. {
  57.   // initializations
  58.   pinMode(SERVO_CMD_PIN, OUTPUT);
  59.   pinMode(SERVO_CLOSE_PIN, INPUT);
  60.   pinMode(SERVO_OPEN_PIN, INPUT);
  61.   pinMode(RADIO_OPEN_PIN, INPUT);
  62.   pinMode(RADIO_CLOSE_PIN, INPUT);
  63.  
  64.   initTimer1();        // initialize timer registers
  65.   sei();               // enable interrupts
  66.  
  67.  
  68.   while(1)
  69.   {
  70.     if(calState){
  71.  
  72.       ServoPositionOpenCal = analogRead(SERVO_OPEN_PIN);
  73.       ServoPositionOpenCal = (ServoPositionOpenCal >> 6) & 0xF;
  74.      
  75.     }
  76.          
  77.     _delay_ms (1000);
  78.     ActiveServoPositionPulse = ServoPositionOpen + ServoPositionOpenCal;
  79.    
  80.   }
  81. }


Upp
 Profil  
 
InläggPostat: 18.17 2018-03-04 

Blev medlem: 20.01 2009-10-29
Inlägg: 1393
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
ServoPositionOpenCal = analogRead(SERVO_OPEN_PIN);
ServoPositionOpenCal = (ServoPositionOpenCal >> 6) & 0xF;

Gör inte detta att ServoPositionOpenCal alltid blir 0?


Upp
 Profil  
 
InläggPostat: 18.19 2018-03-04 
EF Sponsor
Användarvisningsbild

Blev medlem: 17.53 2010-01-04
Inlägg: 4692
Ort: Skogen mellan Uppsala-Gävle
Det är exakt så servot beter sig men förstår inte hur. Har du lust att förklara?

Fick lite hjälp med bit-skiftningen här, men jag gör väl något annat fel som vanligt.


Upp
 Profil  
 
InläggPostat: 18.29 2018-03-04 

Blev medlem: 20.01 2009-10-29
Inlägg: 1393
Därför att du först skiftar så du har 4 bitar kvar, sen nollställer du de fyra bitarna. Prova utan "& 0xF"
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
ServoPositionOpenCal = analogRead(SERVO_OPEN_PIN);
ServoPositionOpenCal = (ServoPositionOpenCal >> 6);


Edit: Förlåt, du nollställer dom ju inte, du nollställer de andra bitarna, vilket du iofs inte borde behöva. Men jag får fundera lite till.


Upp
 Profil  
 
InläggPostat: 18.50 2018-03-04 
EF Sponsor
Användarvisningsbild

Blev medlem: 17.53 2010-01-04
Inlägg: 4692
Ort: Skogen mellan Uppsala-Gävle
Ska förenkla allt igen och se så analogRead() fungerar som det ska.
Provade tidigt med blink-programmet och då fungerade det i alla fall. Återkommer.


Upp
 Profil  
 
InläggPostat: 19.05 2018-03-04 
EF Sponsor
Användarvisningsbild

Blev medlem: 17.53 2010-01-04
Inlägg: 4692
Ort: Skogen mellan Uppsala-Gävle
Hmm, testade den här test-koden nedan och fungerar kanon. Blinkar en LED på utgången och intervallet justeras med en av pottarna.

Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
  1. int sensorPin = PB4;    // select the input pin for the potentiometer
  2. int ledPin = PB0;      // select the pin for the LED
  3. int sensorValue = 0;  // variable to store the value coming from the sensor
  4.  
  5. void setup() {
  6.   // declare the ledPin as an OUTPUT:
  7.   pinMode(ledPin, OUTPUT);
  8.   pinMode(sensorPin, INPUT);
  9. }
  10.  
  11. void loop() {
  12.   // read the value from the sensor:
  13.   sensorValue = analogRead(sensorPin);
  14.   // turn the ledPin on
  15.   digitalWrite(ledPin, HIGH);
  16.   // stop the program for <sensorValue> milliseconds:
  17.   delay(sensorValue);
  18.   // turn the ledPin off:
  19.   digitalWrite(ledPin, LOW);
  20.   // stop the program for for <sensorValue> milliseconds:
  21.   delay(sensorValue);
  22. }


Upp
 Profil  
 
InläggPostat: 19.21 2018-03-04 
EF Sponsor
Användarvisningsbild

Blev medlem: 17.53 2010-01-04
Inlägg: 4692
Ort: Skogen mellan Uppsala-Gävle
Äsch, tänkte eliminera möjligheten att det blev fel med bit-skiftiningen. Nedan fungerade inte heller. Vad fasen kan det vara...

Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
  1.       ServoPositionOpenCal = analogRead(SERVO_OPEN_PIN);
  2.       ServoPositionOpenCal = (ServoPositionOpenCal / 80);


Upp
 Profil  
 
Visa inlägg nyare än:  Sortera efter  
Svara på tråd  [ 68 inlägg ]  Gå till sida Föregående  1, 2, 3, 4, 5  Nästa

Alla tidsangivelser är UTC + 1 timme


Vilka är online

Användare som besöker denna kategori: Inga registrerade användare och 3 gäster


Du kan inte skapa nya trådar i denna kategori
Du kan inte svara på trådar i denna kategori
Du kan inte redigera dina inlägg i denna kategori
Du kan inte ta bort dina inlägg i denna kategori
Du kan inte bifoga filer i denna kategori

Sök efter:
Hoppa till:  
   
Drivs av phpBB® Forum Software © phpBB Group
Swedish translation by Peetra & phpBB Sweden © 2006-2010