mhhh
mein nachbar hat natürlich doch gekniffen.
hab dann halt heut noch eine platine selbst gelötet.
der 220volt links unten ist wirklich nicht das gelbe vom ei.
hatte die schaltung nicht durchgemessen
und prompt wieder meinen arbeitstisch verkohlt.
regel: "bei 220 volt sollte immer eine leere leiterbahn dazwischen sein."
hab nu im schaltplan wenigstens am anfang diesen abstand.
nach den 220k kann ja eh nur noch 1mA fliessen.
und am Optokoppler kann man die enge nachbarschaft eh nicht vermeiden.
Bild hier
ach ja, beim 4021 hat das massekabel zur untersten leiterbahn gefehlt.
hier übrigens der c-code zum auslesen:
Code:
void CServiceCom::Wait(int iMilliSec)
{
DWORD dwWait = timeGetTime() + iMilliSec;
while (dwWait > timeGetTime());
}
void CServiceCom::Process()
{
while (!m_ExitThread)
{
for (int i=0; i<m_ahCom.GetSize(); i++)
{
HANDLE hCom = (HANDLE) m_ahCom[i];
CDWordArray* paAnalogLog = (CDWordArray*)m_aComAnalogLog[i];
BYTE bOut = (BYTE)m_aComOut[i];
BYTE bIn = 0;
BYTE iAnalog = 0;
BYTE iBitAnalaog = 128;
for (BYTE bBit=128; bBit>0; bBit/=2)
{
DWORD dwCOMStatus;
GetCommModemStatus(hCom,&dwCOMStatus);
if(dwCOMStatus & m_dwMonitorAnalog) // MS_DSR_ON MS_CTS_ON MS_RING_ON MS_RLSD_ON
{
iAnalog += iBitAnalaog;
}
iBitAnalaog /=2;
GetCommModemStatus(hCom,&dwCOMStatus);
if(dwCOMStatus & m_dwMonitorIn) // MS_DSR_ON MS_CTS_ON MS_RING_ON MS_RLSD_ON
{
bIn += bBit;
}
if(bOut & bBit)
{
EscapeCommFunction(hCom, SETBREAK); // setzen
}
else
{
EscapeCommFunction(hCom, CLRBREAK); // Loeschen
}
Wait(10);
EscapeCommFunction(hCom,SETDTR);
Wait(10);
EscapeCommFunction(hCom,CLRDTR);
Wait(10);
}
m_aComIn[i] = bIn;
m_aComAnalog[i] = iAnalog;
paAnalogLog->InsertAt(0,iAnalog);
if (paAnalogLog->GetSize() > m_iAnalogLogSize)
{
paAnalogLog->SetSize(m_iAnalogLogSize);
}
EscapeCommFunction(hCom,SETRTS);
Wait(10);
EscapeCommFunction(hCom,CLRRTS);
Wait(10);
}
}
}
roland
Lesezeichen