22p på ömse sida av kristallen till GND brukar vara standart.
Sen har du kopplat..... ööööhhhh .... annolunda ....
Men OK, det finns olika smakar, det fungerar med största sannolikhet men det är ett udda sätt.
Jag hade främst inte använd ett shift-register, jag hade tagit en 7-segment-dekoder-med-latch (t.ex. 4543) per siffer och matat data in med en 8-bitars port (low nipple -> ones, high nipple -> tens) och placerat drivspänningen så lagom att jag hade sluppit transistorer (om nixie-rörens tänd/släck-skillnad tillåter).
Detta hade givit mig att en uppdatering ville kräva 3 data-på-port-och-skaka-en-strobe.
Sen kan du spara R54 - R123 vid att koppla annolunda i det befintliga...
Ang. de där med shiftregistret, så va de B1n4ry som förklarade de för mig, och de va inte så jätte krångligt att förstå hur de skulle kopplas upp och hur de funkade, så jag har kört på de...
hehe Dock är ju programerandet en helt annan historia
22p säjer du... jobbigt, har inga hemma men de funkar utan sa du? Bara så att jag vet att de funkar överhuvud taget så kan man ju beställa sen. Iofs kostar dom väl inte mer än några kronor.
Men klock-kristallen tar inte skada av att inte ha avkopllings kondingarna?
Kondingerna är till för att ge den rätta belastningen på kristallen, samtidig ger de en sorts transformering av signalen så att kristalloscillatorn kan oscillera alls. Det är alltså inte frågan om avkopplingskristaller.
Nu kommer det nog många kommentarer typ: "men jag har ALDRIG kondingar och det kör minsann i alla fall!" och det kan vara rätt, det finns alltid strökapacitans som kan vara nog till att det fungerar på en bra dag och till och med på en normal dag men på en dålig dag?
Om det fungerar i normalfall utan kondingarna bör man fundera på sin kretskortritning, den har då tydligen en del onödiga strökapasitanser...
Sen håller du på med en klocka....och den bör ju gå hyffsat rätt vilket medför att kristallet ska belastas rätt....= kondingar.
På labbplatta brukar det fungera då de olika delar har en kapacitet gentemot varandra men det är bättre att ha kontroll på läget än att hoppas på det bästa.
Med 'annolunda' menar jag att du har vald en koppling som inte precis verkar logisk för mig men som du säger: om den fungerar då gör den ju det, om du hoppar på höger fot eller vänster kviter, bara du kommer fram ju!
Icecap: Fast just i det här fallet (specifikt just för vissa AVR:er) så har nog Virr3 tänkt koppla en klockkristall (32768 Hz) till TOSC-pinnarna. Där sitter det inbyggda kondingar för att kunna driva klockkristaller.
For AVR microcontrollers with Timer/Counter Oscillator pins (TOSC1 and TOSC2), the
crystal is connected directly between the pins. No external capacitors are needed. The
Oscillator is optimized for use with a 32.768 kHz watch crystal. Applying an external
clock source to TOSC1 is not recommended. (Databladet för Mega32)
tyckte att de va lite knepigt, men det stog faktiskt i ett datablad te programeraren jag fixat fram:/ aja, sak samma. inget skadat änsålänge iaf
men, koden funkar fortfarande inte
Vad tusan kan de va?
Mailat atmel och bett dom skicka en exempelkod på hur man får den asynkrona klockan att fungera med alla register å så. hoppas att jag kan få svar från dom snart. hoppas att jag får svar överhuvud taget. Det där med programering är väl inte deras grej, de tillverkar väl de bara. men ändå. Aja. kan ju inte skada iaf.
#include <avr/io.h>
#include <avr/signal.h>
#include <avr/interrupt.h>
#include <inttypes.h>
#include <avr/delay.h>
#include <compat/ina90.h>
uint8_t Htio = 0;//Variabler som behövs
uint8_t Hen = 0;
uint8_t Mtio = 0;
uint8_t Men = 0;
uint8_t Stio = 0;
uint8_t Sen = 0;
SIGNAL(SIG_OVERFLOW2)//interuppt triggas på overflow
{
PORTA |= _BV(PA3); // OK, den tror jag på
PORTA |= _BV(PA0); // Samma här
_delay_loop_1(10); // Öhhhh...delay i en interrupt????
PORTA &= ~_BV(PA0); // Nåväl, någon anledning är det väl...
if(++Sen >= 10) // Räkna upp sekund-ental
{ // Hoppla, 10 eller mer
Sen = 0; // Nolla sekund-ental
if(++Stio >= 6) // Räkna upp sekund-tiorna
{ // Hoppla, sekund-tiotal är 6 eller mer
Stio = 0; // Nolla sekund-tiotal
if(++Men >= 10) // Räkna upp minut-ental
{ // Oj då, mer än 9 minuter på entalen
Men = 0; // Nolla minut-ental
if(++Mtio >= 6) // räkna upp minut-tiotal
{ // Jaha...overflow här med...
Mtio = 0; // Nolla den då...
if(++Hen >= 10) // Räkna upp timme-ental
{ // Ojsan, det är mer än 9 timmer på entalen...det går inte
Hen = 0; // Nolla timme-ental
if(++Htio >= 2) Htio = 0; // Räkna upp timme-tiotal, om mer än 2 ska den nollas
}
}
}
}
}
}
int main(void)
{
int temp0;
int temp1;
for(temp0=0; temp0<0x0040; temp0++)
{
for(temp1=0;temp1<0xFFFF;temp1++);
}
DDRA=0xFF;
TIMSK &=~((1<<TOIE2)|(1<<OCIE2));
ASSR |= (1<<AS2);
TCNT2 = 0x00;
TCCR2 = 0X05;
while (ASSR&0x07);
TIMSK |= (1<<TOIE2);
_SEI();
while(1)
{
MCUCR = 0xB0;
_SLEEP();
_NOP();
TCCR2=0x05;
while (ASSR&0x07);
}
uint8_t a;
uint8_t b;
uint8_t c;
uint8_t d;
uint8_t e;
uint8_t f;
while(1)
{
for(a=0;a>9;a++)
{
if(Htio==a)
{
PORTA |= _BV(PA2);
_delay_loop_1(10);
PORTA &= ~_BV(PA2);
PORTA |= _BV(PA1);
_delay_loop_1(10);
PORTA &= ~_BV(PA1);
}
else
{
PORTA |= _BV(PA2);
_delay_loop_1(10);
PORTA &= ~_BV(PA2);
_delay_loop_1(10);
}
}
for(b=0;b>9;b++)
{
if(Hen==b)
{
PORTA |= _BV(PA2);
_delay_loop_1(10);
PORTA &= ~_BV(PA2);
PORTA |= _BV(PA1);
_delay_loop_1(10);
PORTA &= ~_BV(PA1);
}
else
{
PORTA |= _BV(PA2);
_delay_loop_1(10);
PORTA &= ~_BV(PA2);
_delay_loop_1(10);
}
}
for(c=0;c>9;c++)
{
if(Mtio==c)
{
PORTA |= _BV(PA2);
_delay_loop_1(10);
PORTA &= ~_BV(PA2);
PORTA |= _BV(PA1);
_delay_loop_1(10);
PORTA &= ~_BV(PA1);
}
else
{
PORTA |= _BV(PA2);
_delay_loop_1(10);
PORTA &= ~_BV(PA2);
_delay_loop_1(10);
}
}
for(d=0;d>9;d++)
{
if(Men==d)
{
PORTA |= _BV(PA2);
_delay_loop_1(10);
PORTA &= ~_BV(PA2);
PORTA |= _BV(PA1);
_delay_loop_1(10);
PORTA &= ~_BV(PA1);
}
else
{
PORTA |= _BV(PA2);
_delay_loop_1(10);
PORTA &= ~_BV(PA2);
_delay_loop_1(10);
}
}
for(e=0;e>9;e++)
{
if(Stio==e)
{
PORTA |= _BV(PA2);
_delay_loop_1(10);
PORTA &= ~_BV(PA2);
PORTA |= _BV(PA1);
_delay_loop_1(10);
PORTA &= ~_BV(PA1);
}
else
{
PORTA |= _BV(PA2);
_delay_loop_1(10);
PORTA &= ~_BV(PA2);
_delay_loop_1(10);
}
}
for(f=0;f>9;f++)
{
if(Sen==f)
{
PORTA |= _BV(PA2);
_delay_loop_1(10);
PORTA &= ~_BV(PA2);
PORTA |= _BV(PA1);
_delay_loop_1(10);
PORTA &= ~_BV(PA1);
}
else
{
PORTA |= _BV(PA2);
_delay_loop_1(10);
PORTA &= ~_BV(PA2);
_delay_loop_1(10);
}
}
}
}
Så blev de. Men funkar fortfarande inte... Dock är det inget "brus" på utgången nu.
Nu vet jag verkligen inte vad som är fel. hehe. Det
Jag har stirrat ett tag på koden. Men kan inte hitta något.
Tusan också. Jag som hade hoppats på att det skulle fungera.
Någon som ser ifall det ser rätt ut?
Den här loopen kommner du aldrig att komma ur, så allt efter det kommer aldrig att exekveras. CPU'n kommer bara att loopa runt där plus i interruptet (om det nu är rätt konfigurerat). Men det kanske är meningen just nu under debuggingen?