Vis indlæg

Denne sektion tillader dig at se alle indlæg oprettet af dette medlem. Bemærk at du kun kan se indlæg der er oprettet i områder du i øjeblikket har adgang til.


Beskeder - jascore

Sider: [1] 2 3 ... 11
1
Generel Elektronik / Sv: hjælp til servo kontrol med timer
« Dato: Februar 13, 2012, 10:07:24 »
fandt en løsning  ;D

2
Generel Elektronik / Sv: hjælp til servo kontrol med timer
« Dato: Januar 21, 2012, 02:14:42 »
Hej igen.
Jeg håber du kan give mig et hurtigt hint der ikke kræver for meget tid på flg.

jeg har koden
Kode:
	

switch (eDose1)
{
case 1: lcd_puts("Bal1 CaCl2-2H2O"); break;
case 2: lcd_puts("Bal2 NaHCO3"); break;
case 3: lcd_puts("Bal3 mineralsalt"); break;
case 4: lcd_puts("Kh buffer"); break;
case 5: lcd_puts("Ca Buffer"); break;
case 6: lcd_puts("Mg buffer"); break;
case 7: lcd_puts("Sporeelement 1"); break;
case 8: lcd_puts("Sporeelement 2"); break;
case 9: lcd_puts("Sporeelement 3"); break;
case 10: lcd_puts("Aminosyre"); break;
case 11: lcd_puts("VSV"); break;
case 12: lcd_puts("Jod"); break;
case 13: lcd_puts("Strontium"); break;
case 14: lcd_puts("Phyto"); break;
case 15: lcd_puts("Zoo"); break;
case 16: lcd_puts("Diverse1"); break;
case 17: lcd_puts("Diverse2"); break;
case 18: lcd_puts("Diverse2"); break;
}

Jeg skal bruge den 12 forskellige steder, men uafhængigt af hinnanden og kan jo bare bruge forskellige switch, men det fylder jo helt vildt hvis jeg laver 12 kodestumper.
Men jeg kan simpelthen ikke greje hvordan jeg kan lave en variabel der består af bogstaver f.eks a = "thomas";
for så kunne jeg bare definerer dem som så og så kalde den variabel jeg skal bruge.
Har også kigget på avr/pgmspace, men ligesom sidst her jeg ikke helt styr på det tabel halløj.
Håber du kan give et hint
 :o
fik det løst på flg måde.
Kode:
prog_char eName0[] = "";
prog_char eName1[] = "Bal1 CaCl2-2H2O";
prog_char eName2[] = "Bal2 NaHCO3";
prog_char eName3[] = "Bal3 mineralsalt";
prog_char eName4[] = "Kh buffer";
prog_char eName5[] = "Ca Buffer";
prog_char eName6[] = "Mg buffer";
prog_char eName7[] = "Sporeelement 1";
prog_char eName8[] = "Sporeelement 2";
prog_char eName9[] = "Sporeelement 3";
prog_char eName10[] = "Aminosyre";
prog_char eName11[] = "VSV";
prog_char eName12[] = "Jod";
prog_char eName13[] = "Strontium";
prog_char eName14[] = "Phyto";
prog_char eName15[] = "Zoo";
prog_char eName16[] = "Diverse1";
prog_char eName17[] = "Diverse2";
prog_char eName18[] = "Diverse3";
PROGMEM const char *eString_table[] = 	   
{   
eName0, eName1, eName2, eName3, eName4, eName5, eName6, eName7, eName8, eName9, eName10, eName11, eName12, eName13, eName14,
eName15, eName16, eName17, eName18
};
char eDose1buf[16];
char eDose2buf[16];
char eDose3buf[16];
char eDose4buf[16];
char eDose5buf[16];
char eDose6buf[16];


og nede hvor det skal bruges
Kode:
	
strcpy_P(eDose1buf, (char*)pgm_read_word(&(eString_table[dosing1num])));
lcd_puts(eDose1buf);


3
Generel Elektronik / Sv: hjælp til servo kontrol med timer
« Dato: Januar 09, 2012, 19:52:34 »
Dejligt at høre fra dig.
Citér
Men jeg er nødt til at holde en pause fra opgaver
Du skal da passe på dig selv.
Jeg er gået videre med en udvidet udgave med display (16X2) og et menu system hvor jeg bruger knapper til at ændre værdier, og det går meget godt indtil videre.
Jeg bruger den atmega164pv10pu som du sendte med. og tror jeg har rimeligt styr på det indtil videre.
har endvidere udvidet med en forstærker det til at måle ph værdier og lidt andet.

"krystallen" er i et metal hus og har 2 ben. har bare forbundet den til de to xtal og smidt nogle 12 nf på også.
har været lidt i tvivl om hvorledet refference spæmdingen fungerer på atmega, men har gjort det at jeg har smidt en 10 nf mellem jord og vcc. vcc har jeg ført videre til avcc og også der smidt en 10 nf på mellem avcc og den gnd der ligger ved siden af avcc. slutteligt har jeg også smidt en 10 nf mellem aref og jord. det syntes jeg kunne læse mig til.

Men nok om det. jeg koder løst og har faktisk lært en del ved at "stå på egne ben" så at sige.  :o

Pas nu på dig selv. Jeg poster lidt en gang imellem, men forventer ikke at du binder dig eller noget. Det er jo heller ikke meningen at du skal være problem knuser for hele sitet.
Mange hilsner herfra  ;D

4
Hej. Bare som suplement.
Jeg målte på min 150W hqi lampe som hang over mit saltvandsakvarie.. forbruget på sådan en ( gammel model og ikke elektronisk balast) var iflg min watt måler ca 4000 om året hvis den var tændt 24/7 så ca 2000. Så skiftede jeg til 60w led, som jeg bare køre på et par strømforsyninger (2 skt 32v 1 amp) og det koster mig ca 450 kr.
Mine leds er 10w  blandet 7000k og 10000k fra kinaland, og har kostet mig omkring 200 kr for 6 stk. Måske holder kinaled ikke til de 50000 timer, men for omkring  33 kr er det jo til at overse at skifte dem hvis de kun holder det halve.
Man kan også købe sig fattig i dyre led controlleres men jeg køre fint med 2 gamle bærbare pc strømforsyninger.

held og lykke med det

5
Generel Elektronik / Sv: hjælp til servo kontrol med timer
« Dato: December 23, 2011, 16:50:03 »
Man bliver jo helt bekymret når du ikke er på så lang tid. Men går ud fra at du har haft en vanvittig travl december.
Jeg har fået systemet til at virke som det skal, men har lavet lidt om i koden, for jeg kunne simpelthen ikke få tabellerne til at virke. Desuden var der ret meget støj på de laveste bits så var nød til at bruge målte værdier der. men når nu julen engang er overstået ville det være dejligt hvis du fik tid til at hjælpe med optimere koden, jeg er endt ud med ca. 18k. Til gengæld har jeg lært sindsygt meget med learning by doing metoden gg.
Men tusind tak for hjælpen indtil nu, og kan du have en FANTASTISK jul

Mange hilsner herfra.

Ps he he jeg har en bims der ligner en clock krystal. der står txc 8.00g9nf er det det eller ??

6
Generel Elektronik / Sv: hjælp til servo kontrol med timer
« Dato: December 11, 2011, 02:41:23 »
fandt lige en bummert mere jeg har lavet.
det nytter jo ikke noget at jeg køre 8 bit adc og søger resultatet i en 10 bit tabel eller tager jeg fejl

7
Generel Elektronik / Sv: hjælp til servo kontrol med timer
« Dato: December 10, 2011, 17:54:09 »
Har fundet ud af at hvis jeg istedet for freerunning mode sætter den til singleconversion mode og så starter en ny conversion med ADCSRA |= (1 << ADSC); inde i ISR(ADC_vect) så konverterer den der ud af.

HAr også haft servoen til at køre dog ikke ved hjælp af adc værdierne, men med konstante værdier.
MEN - -  er der en metode der elimere støj på pwm. for servoen står og sitre når den egentlig skulle stå stille. Så der må være en eller anden form for støj i pwm signalet eks vil værdien 1,2 ikke være konstant men nogle gange eks 1.21 og 1.19

og den eneste måde jeg kan få den til at køre 8 mhz er ved at sætte CLOCK til 1mhz og lfuse til e2 tror jeg
jeg tester det ved at hvis jeg lader lfuse være som den burde til 8 mhz, altså e2 og så sætter clock til 8mhz så kører blinker min timer langsommere
sætter jeg den som den skal i 1 mhz altså ifuse 62 så er den 8 gange langsomere med 8mhz clock end 1 mhz clock
kan dog kun se forskellen med en delay.

8
Generel Elektronik / Sv: hjælp til servo kontrol med timer
« Dato: November 27, 2011, 18:17:55 »
Hej igen.
nu bliver det lidt mere konkret gg
det er denne linie der fryser systemet i ISR(ADC_vect)
adcValue[adcChannel - ADC_FIRST][adcWriteIndex] = (adHi << 8 ) | adLo;            /* save the value we've read above */
og den hænger jo sammen med if (adcBits <= 8 )

ISR(ADC_vect)
{
    toggleLED1();

    uint8_t        adLo;
    uint8_t        adHi;

    if(adcBits <= 8 )                                                /* using 8-bit precision */
   {
        if(ADCSRB & (1 << ADLAR))                                          /* check hardware alignment-configuration and act accordingly */
      {
            adLo = 0;
            adHi = inb(ADCH);                                             /* (read highbyte only) */
      }
        else
      {
            adHi = 0;
            adLo = inb(ADCH);                                             /* (read highbyte only) */
      }
   }
    else
   {
        adLo = inb(ADCL);                                             /* read lowbyte before highbyte! */
        adHi = inb(ADCH);                                             /* read lowbyte before highbyte! */
   }

så længe jeg køre 8 bit kan jeg jo reducere den til at fjerne alle else og når jeg ved at jeg har sat ADLAR i initADC kan jeg vel ogso fjerne if condition og det samme når jeg ved at adc er 8 bit sat i main.c fjerner jeg også den sidste if lige for en stund, og ender ud med en værdi for adLo og adHI. dem smider jeg så ind i linien der skaber problemer og den kommer til at hedde

adcValue[adcChannel - ADC_FIRST][adcWriteIndex] = (inb(ADCH) << 8 ) | 0;

er det korrekt reduceret?
hvordan den linie så fungerer har jeg ingen ide om endnu, men tror den har noget med de værdier der skal bruges i tabellen, og hvad det er der får den til at fryse har jeg heller ikke gennemskuet endnu  :o
Men erstatter jeg det før = tegnet med en anden variabel, så virker det godt og så må det være adcValue[adcChannel - ADC_FIRST][adcWriteIndex] der fryser systemet men det kan selvfølgelig også være værdien den vil skrive der er noget galt med

ved godt der er et mellemrum for meget i 8 ) men det er for at slippe for smily

9
Generel Elektronik / Sv: hjælp til servo kontrol med timer
« Dato: November 26, 2011, 23:23:31 »
nu har jeg simpelthen været ISR(ADC_vect) igennem fra a-z (det siger jeg hvertfald til mig selv :o ).
har enda haft lavet et komplet tomt program der kun tog sig af adc interrupt i free running mode og lige meget hvad
jeg gør så kræver det at jeg slukker og tænder for strømmen til avr, før den registrerer ændringer på adc'en. jeg kan ikke forstå det.

Lige et hurtigt spørgsmål.
hvis jeg vil ændre f_cpu kan jeg godt bare nøjes med at ændre clock i makefilen?

og lige en ting til. ved ikke om det har betydning for hvordan chippen har det, men device signature er som den skal være.

10
Generel Elektronik / Sv: hjælp til servo kontrol med timer
« Dato: November 26, 2011, 03:39:27 »
prøvede lige en sidste ting inden sove til
Kode:
ISR(ADC_vect)
{

	if(ADCL > 128)
   {
		setLED1(1);
		setLED2(0);

   }
      
   else
   {
		setLED1(0);
		setLED2(1);
  
   } 
ADCSRA |= (1 << ADSC);
}
void initADC(uint8_t aBits)
{

	ADMUX = (0 << REFS1) | (0 << REFS0);							
	ADCSRA = (1 << ADEN) | (1 << ADIF) | (1 << ADIE) | (0 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);
	sei();
	ADCSRB = (0 << ADTS2) | (0 << ADTS1) | (0 << ADTS0) | (1 << ADLAR);				

	ADCSRA |= (1 << ADSC);	
 }

Når jeg gør sådan så skifter led kun efter jeg ændre på dips og pot (ADCL) slukker strøm og tænder igen.
den vil ikke skifte mens der er tændt og jeg skifter. alle andre init er kommenteret ud.

11
Generel Elektronik / Sv: hjælp til servo kontrol med timer
« Dato: November 25, 2011, 22:45:02 »
Citér
Hele denne blok...
gg ok  :-[
men skal der være en ADCSRA |= (1 << ADSC);
både i initADC og i ISR(PCINT0_vect)
er det ikke nok at starte den et sted ?

12
Generel Elektronik / Sv: hjælp til servo kontrol med timer
« Dato: November 25, 2011, 22:34:01 »
mht til ADCSRA |= (1 << ADSC);
kan jeg så ikke lade den ligge i initADC og så en i startknappen. så i ISR(PCINT0_vect) fjerne ADCSRA |= (1 << ADSC);
lave en
if(adcChannel == ADC_LAST)
{
     ADCSRA |= (0 << ADSC);
}
hvis jeg gør det på den måde så køre timeren hvertfald.   

13
Generel Elektronik / Sv: hjælp til servo kontrol med timer
« Dato: November 25, 2011, 21:04:02 »
Citér
Det var egentlig forberedt på at skulle læse 2 potmetre og 2 sæt DIP-switches. ;)
...Derudover regnede jeg med at du ville køre microcontrolleren på 8MHz
ja der er rigtigt. regnede også med at der var derfor at adc prescaleren var sat til 128.
mht at køre 8 mhz. den eneste grund til ikke at gøre dette er at jeg har læst at det skulle være sværre at lave den 20 ms cycle der skal bruges til servoen. ellers er der ikke nogen grund. til ikke at gøre det
og et eller andet sted er det vel også tåbeligt ikke at køre alt hvad den kan trække.
prøver at smide ændringerne ind.
ved ikke hvad jeg skulle have gjort uden din hjælp. det er jo en helt ny verden der åbner sig, hvis man kan lide at lege med sådan noget  :P

14
Generel Elektronik / Sv: hjælp til servo kontrol med timer
« Dato: November 25, 2011, 20:40:22 »
kan man ikke lave en løsning hvor den kun aflæser adc værdierne når der trykkes på start knappen? der er jo ingen grund til at den kigger på dem når programmet er startet op, med mindre mam selvfølgelig vil ændre doseringen, men så ma man trykke på start når det er gjort. så skal ADC interruptne jo kun køres enten ved tryk på start, eller ved timer0elapsed

15
Generel Elektronik / Sv: hjælp til servo kontrol med timer
« Dato: November 25, 2011, 20:28:03 »
det er linjen ADCSRA |= (1 << ADSC);
der skaber problemer i initADC
kommenterer jeg den ud starter uret med at køre inittimer

Sider: [1] 2 3 ... 11