Die folgenden Fragen werden hier beantwortet:
Ist Deine Frage nicht dabei? Dann schaue ins Forum oder schreib mir eine E-mail und hoffe, daß ich mich relativ schnell bei Dir melde. Achte aber bitte darauf, daß der Freemail-Provider "gmx.de" nicht in Deiner Ignore-Liste oder im Spam-Filter steht. Sonst wartest Du vergeblich auf meine mail und ich tippe mir umsonst die Finger wund! Wenn ich nach zwei Wochen noch nichts von mir hören lasse, darfst Du einmal höflich nachfragen...
Originale C-Control-I (Version 1.1) | |||||||
![]() Main-Unit |
![]() M-Unit |
![]() Station |
Das sind die drei weitverbreiteten Varianten der originalen C-Control, bestehend aus dem 8-Bit-Mikrocontroller 68HC05B6 von Motorola, einem 8 KByte großen seriellen EEPROM und einigen anderen Elementen. Programmiert wird diese Einheit wahlweise im C-Control-Basic-Dialekt (CCBASIC) kombiniert mit 6805-Assembler oder mittels grafischer C-Control-Plus-Oberfläche (CCPLUS). Außerdem existieren zahlreiche alternative Programmiersprachen (OCBASIC, mBasic, Basic++, C3C, CCCCC, ...). Interessant ist die M-Unit mit dem besten Preis-Leistungs-Verhältnis und die Station im Hutschienen-Gehäuse. Der Controller auf der Main-Unit ist gesockelt und läßt sich durch einen Controller mit besserem CC1-OS-Project-Betriebssystem ersetzen. Die C-Control 1.1 ist nicht mehr lieferbar. Als Alternative stehen die Controller der Open-Control-Familie zur Verfügung. | ||||
Neue C-Control-I (Version 1.2, 2.0 und C-Micro) | |||||||
![]() M-Unit 2.0 |
![]() Micro (PCB und Chip) |
Diese C-Control-Versionen basieren auf 8-Bit-Controllern der 68HC908-Serie von Freescale. Bei der C-Micro handelt es sich um eine miniaturisierte Variante der M-Unit 2.0 mit geringerem Funktionsumfang. Die M-Unit Version 1.2 sollte die M-Unit Version 1.1 ersetzen. Der Vorteil der neuen M-Units ist eine bis zu 30-fach höhere Geschwindigkeit, aber leider sind diese zur originalen C-Control-I maßgeblich inkompatibel, so daß nur noch in Basic++ und eingeschränkt in Assembler (CCASM) und CCBASIC programmiert werden kann. Im Forum klagen außerdem etliche Anwender über nicht vorhandene Updatemöglichkeiten, Fehler in Basic++, im Zubehör und im Betriebssystem (und hier) der Controller. Obwohl alle veröffentlichten Versionen der neuen C-Control-I Fehler enthalten, existieren nur für neuere Versionen OS-Updates. Die verschiedenen Versionen der neuen C-Control sind nicht mehr lieferbar. Als Alternative zur C-Micro stehen die kleinen Controller der Open-Control-Familie zur Verfügung. | |||||
Open-Control (Open-Micro, Open-Mini, Open-Midi, Open-Macro und Open-Maxi) | |||||||
|
Nachdem immer mehr Fehler in der neuen C-Control-I entdeckt wurden, haben einige Anwender das Open-Control-Projekt ins Leben gerufen, um eine leistungsstarke Alternative zu den Conrad-Controllern zu entwickeln. Entstanden sind bisher die fünf preiswerten Mikrocontroller Open-Micro, Open-Mini, Open-Midi, Open-Macro und Open-Maxi, die zur C-Micro und zur Version 1.1 hochkompatibel sind. Bei der Entwicklung wurde größten Wert gelegt auf Anwenderkomfort, Fehlerfreiheit, maximalen Funktionsumfang, mehr Speicher und gute Dokumentation. Die OM-Controller lassen sich in CCPLUS, CCBASIC, mBasic, CCCCC, Assembler und dem neuen OCBASIC-Dialekt mit integriertem Assembler programmieren. Die Controller sind bei CCTools in verschiedenen Varianten und mit reichhaltigem Zubehör erhältlich. Zu Schulungszwecken dürfen sie kostenlos hergestellt werden. Auf der offiziellen Informationssite gibt es weitere Informationen, Neuigkeiten, Downloads, Anwenderprojekte, sowie zwei sehr umfangreiche Bedienungsanleitungen. | ||||||
C-Control-Pro (Mega-32 und Mega-128) | |||||||
|
Die C-Control-Pro-Familie ist seit vielen Jahren am Markt, befindet sich aber noch immer in der Entwicklung. Die ersten veröffentlichten Versionen unterstützten noch nicht einmal eine gebufferte serielle Schnittstelle. Der Anwender muß deshalb zunächst ein Update durchführen, um die volle Funktionalität zu erhalten. Programmiert wird in eigenen C- und BASIC-Dialekten, die interpretiert ausgeführt werden. Etliche Anwender beklagen sich im Forum, weil sie es bereuen, diesen Controller eingesetzt zu haben. Im Katalog wurde irrtümlich behauptet, die Programmausführung wäre acht mal so hoch wie auf der M-Unit 2.03. Mittlerweile wurde dieser Wert auf Faktor zwei (!) korrigiert. Obwohl die CCPro unter anderem Fließkommazahlen und einen bis zu 110 kByte großen Programmspeicher unterstützt, schrecken die meisten Anwender vor den horrenden Anschaffungskosten von 170 bis 200 EUR zurück. | ||||||
C-Control-II | |||||||
![]() CC2-Unit |
![]() CC2-Unit NV |
![]() CC2-Station |
Die C-Control-II ist mit ihrem 16-Bit-Controller 80C164CI die bisher schnellste C-Control-Variante. Sie besitzt ein Multithreading-Betriebssystem und einen sehr großen Speicher (64kB RAM) und ist daher selbst in komplexen Projekten einsetzbar. Sie ist allerdings nicht so einfach zu programmieren und für einen Mikrocontroller recht teuer. Programmiert wird in einem C-ähnlichen Dialekt, der wie bei der C-Control-I interpretiert ausgeführt wird. Auch Assemblerprogrammierung ist möglich. Die Site mit den neusten Informationen zur CC2 ist CC2Net.de von André Helbig. |
' Einfaches Terminal in MS-DOS QBASIC 1.1 CLS : PRINT "Test-Terminal" : LOCATE , , 1 OPEN "COM2:9600,N,8,1,CD0,CS0,DS0,OP0,RS" FOR RANDOM AS #1 DO IF LOC(1) > 0 THEN i$ = INPUT$(LOC(1), #1) FOR i% = 1 TO LEN(i$) b% = ASC(MID$(i$, i%, 1)) IF b% = 13 THEN PRINT ELSE IF b% <> 10 THEN PRINT CHR$(b%); NEXT i% END IF i$ = INKEY$ : IF i$ = CHR$(27) THEN EXIT DO IF i$ <> "" THEN COLOR 14 : PRINT i$; : COLOR 7 : PRINT #1, i$; END IF LOOP CLOSE #1 LOCATE , , 0 : IF POS(0) > 1 THEN PRINT PRINT "Programmende." |
org $101 initmytimercmp: lda #(mytimercmp-$100) ; eigene Interruptroutine fuer den sta $52 ; Timer Output Compare aktivieren rts ; Ruecksprung zu BASIC mytimercmp: brclr #6,$13,mytimercmp2 ; auf Timer Output Compare 2 testen lda #1 ; mit gesetztem Akku ins System rts ; zurueckkehren mytimercmp2: lda $1f ; festlegen, wann der naechste add #lo(2000) ; Timer Output Compare 2 Interrupt sta $84 ; ausgeloest werden soll lda $1e ; $83:$84 = OCR2 + #2000 adc #hi(2000) ; (4 * 2000 * 1/(2e6 Hz) = 4 ms) jsr $0e89 ; Rest der Standardroutine aufrufen clra ; mit geloeschtem Akku ins System rts ; zurueckkehren |
define taster port[1] 'liefert ON oder OFF define alterzustand bit[192] 'speichert ON oder OFF define temp bit[191] 'speichert ON oder OFF #schleife ' Dieser Teil des Programms wird staendig durchlaufen temp=taster if temp=alterzustand then schleife alterzustand=temp ' Dieser Teil des Programms wird nur einmal bei jeder ' Zustandsaenderung am Port, in diesem Fall also dem ' Druecken oder Loslassen des Tasters, durchlaufen goto schleife |
define meinport byteport[1] 'entspricht PORT[1] bis PORT[8] define alterzustand byte define temp byte #schleife ' Dieser Teil des Programms wird staendig durchlaufen temp=meinport and &b00001110 'PORT[2], PORT[3] und PORT[4] beobachten if temp=alterzustand then schleife alterzustand=temp ' Dieser Teil des Programms wird nur einmal bei jeder ' Zustandsaenderung an einem der drei Ports durchlaufen goto schleife |
' einfache Zeitschaltuhr fuer C-Control ' am 07.11.2002 in CCBASIC von Dietmar Harlos ' Signalisiert, ob das Geraet ein- oder ausgeschaltet ist define status bit [192] ' Initialisierung des Geraets status=on : gosub ausschalten ' Endlosschleife #endlos print "Stunde: ";hour;" Minute: ";minute ' man sollte beachten, dass sich HOUR und MINUTE waehrend der ' folgenden Abfrage aendern koennen if (hour=16 and minute>=45) or (hour>=17 and hour<=19) or (hour=20 and minute<15) then goto true gosub ausschalten goto endif #true gosub anschalten #endif ' man koennte an dieser Stelle abfragen, ob der Anwender ' eine Taste drueckt und das Geraet manuell ein- oder ' ausstellen moechte goto endlos ' Subroutine zum Anschalten #anschalten ' mehrfaches Anschalten verhindern if status=off then status=on else return print "anschalten" return ' Subroutine zum Ausschalten #ausschalten ' mehrfaches Ausschalten verhindern if status=on then status=off else return print "ausschalten" return |
print print "Ueberlauftolerante Timerabfrage:" print define ende word ende=timer+10 print "Soll-Ende: ";ende #warten pause 1 print timer if ende-timer>0 then warten print "Ist-Ende: ";timer end |
DEFINE a WORD 'Dividend DEFINE b WORD 'Divisor DEFINE c BYTE 'Zaehler fuer Nachkommastellen a=2006 b=1119 GOSUB ausgabeadurchb PRINT END #ausgabeadurchb PRINT a/b;"."; c=0 #schleife a=(a MOD b)*10 PRINT a/b; c=c+1 IF a AND c<10 THEN schleife RETURN |
' Demonstration zweier Algorithmen zur Mittelwertberechnung ' am 07.11.2002 in CCBASIC von Dietmar Harlos define mittel word define anz word define summe word define wert byte mittel=0 : anz=0 : summe=0 #endlos anz=anz+1 print anz;". ";"Messwert: "; input wert print wert ' für den Simulator summe=summe+wert mittel=mittel+(wert-mittel)/anz print "Mittelwert: ";mittel print "Summe: ";summe print "Summe/Anzahl: ";summe/anz print goto endlos |
' Cosinus-Funktion auf der C-Control-I mittels Integerzahlen ' am 01. September 2001 in CCBASIC von Dietmar Harlos ' Zwischen 0 und 88 Grad (bis 1.53 Radians) liegt der relative ' Fehler bei kleiner/gleich 3 Prozent.. define winkel word define temp1 word define temp2 word winkel=79 'der Winkel in Radians (skaliert mit 100) PRINT cosinus 'das Ergebnis ist mit 10000 skaliert #cosinus temp2=winkel*winkel temp1=10000-temp2/2 temp2=(temp2/200)*(temp2/100) return temp1+temp2/13 'eigentlich 12 aber mit 13 geringerer Fehler |
PRINT "ln(x) fuer die C-Control-I" PRINT "ln(0.01) bis ln(2.56) kann errechnet werden" PRINT "das Ergebnis ist mit 5000 skaliert" PRINT "Hinweis: Berechnung von hoeheren Werten durch ln(a*b)=ln(a)+ln(b)" PRINT DEFINE x WORD DEFINE erg WORD PRINT "Beispiel 1:" PRINT "Berechnung von ln((0+1)/100)*5000 = -23026" PRINT " ln(0.01) = -4.605" x=0 LOOKTAB lnx, x, erg PRINT erg PRINT PRINT "Beispiel 2:" PRINT "Berechnung von ln((255+1)/100)*5000 = 4700" PRINT " ln(2.56) = 0.94" x=255 LOOKTAB lnx, x, erg PRINT erg PRINT END TABLE lnx -23026 -19560 -17533 -16094 -14979 -14067 -13296 -12629 -12040 -11513 -11036 -10601 -10201 -9831 -9486 -9163 -8860 -8574 -8304 -8047 -7803 -7571 -7348 -7136 -6931 -6735 -6547 -6365 -6189 -6020 -5856 -5697 -5543 -5394 -5249 -5108 -4971 -4838 -4708 -4581 -4458 -4338 -4220 -4105 -3993 -3883 -3775 -3670 -3567 -3466 -3367 -3270 -3174 -3081 -2989 -2899 -2811 -2724 -2638 -2554 -2471 -2390 -2310 -2231 -2154 -2078 -2002 -1928 -1855 -1783 -1712 -1643 -1574 -1506 -1438 -1372 -1307 -1242 -1179 -1116 -1054 -992 -932 -872 -813 -754 -696 -639 -583 -527 -472 -417 -363 -309 -256 -204 -152 -101 -50 0 50 99 148 196 244 291 338 385 431 477 522 567 611 655 699 742 785 828 870 912 953 994 1035 1076 1116 1156 1195 1234 1273 1312 1350 1388 1426 1463 1501 1537 1574 1610 1647 1682 1718 1753 1788 1823 1858 1892 1926 1960 1994 2027 2061 2094 2126 2159 2191 2223 2255 2287 2319 2350 2381 2412 2443 2473 2504 2534 2564 2594 2624 2653 2682 2712 2741 2769 2798 2827 2855 2883 2911 2939 2967 2994 3022 3049 3076 3103 3130 3156 3183 3209 3236 3262 3288 3313 3339 3365 3390 3415 3441 3466 3491 3515 3540 3565 3589 3614 3638 3662 3686 3710 3733 3757 3781 3804 3827 3851 3874 3897 3920 3942 3965 3988 4010 4032 4055 4077 4099 4121 4143 4165 4186 4208 4229 4251 4272 4293 4314 4336 4356 4377 4398 4419 4439 4460 4480 4501 4521 4541 4561 4581 4601 4621 4641 4661 4680 4700 TABEND |
' LN(x) als Tabelle für C-Control scalex = 100 scalelnx = 5000 PRINT "TABLE lnx" FOR x% = 1 TO 256 lnx = LOG(x% / scalex) / LOG(EXP(1)) t% = lnx * scalelnx PRINT t%; NEXT x% PRINT : PRINT "TABEND" END |
print myfilefree end #myfilefree return FILEFREE+28672 |
org $101 prolog: ;I2C-EEPROM abmelden, I2C-BUS in Idle-State jsr $08BB ; I2C_ReadLast stromsparen: stop ;Mikrocontroller komplett stoppen, auf IRQ warten epilog: ;I2C-EEPROM wieder anmelden, Ruecksprung zu BASIC ldx #$A0 jsr $083C ; I2C_Start ldx $66 jsr $0846 ; I2C_Write ldx $67 jsr $0846 ; I2C_Write ldx #$A1 jmp $083C ; I2C_Start end |
if (ccstatus and 1) then print "Es wird augenblicklich ein gueltiges DCF77-Signal empfangen." if (ccstatus and 16) then print "Die Systemzeit wurde mindestens einmal gestellt." if (ccstatus and 32) then print "Der Slowmodus ist aktiv." end #ccstatus table ccstatustab 2938 '11*256+$7b-1 tabend return |
' Parameteruebergabe an eine BASIC-Subroutine (oder an Assembler) mit Hilfe ' des Stacks. Damit lassen sich Parameter an eine Subroutine uebergeben, ' ohne dass immer die gleichen Variablen zur Parameteruebergabe verwendet ' werden muessen. Im folgenden Beispiel kommt man sogar ganz ohne Variablen ' aus! ' Da das Betriebssystem normalerweise kein richtiges POP durchfuehrt, muss ' man in der Subroutine etwas tricksen, um mehr als einen uebergebenen Wert ' vom Stack zu lesen. Man sollte sich etwas im Rechenstack-Handling des ' C-Control-Betriebssystems auskennen. ' (c) Dietmar Harlos - 09. Februar 2002 bis 05. Februar 2005 define push ad[1] ' In einen A/D-Port kann man nicht schreiben, define pop da[1] ' und einen D/A-Port kann man nicht auslesen... print push=123 ' ...darum erzeugt der CCBASIC-Compiler in den hier push=456 ' angegebenen drei Faellen nur Code, der die Zahlen push=789 ' 123, 456 und 789 nacheinander auf den Stack pusht. gosub test print pop end #test ' Das kann man nun in der Subroutine ausnutzen: print pop ' Zuerst wird 789 gelesen, aber nicht vom Stack entfernt. sys &h1499 ' Erst das SYS entfernt den Wert mit einem "echten" POP. print pop+pop ' Und hier wird 123+456 berechnet und ausgegeben. return 987 ' Dieser Rueckgabewert wird auf den Stack gepusht, das ' Unterprogramm beendet und der Wert wird im Haupt- ' programm (hinter GOSUB) per "PRINT pop" ausgegeben. |
Alles gelesen und immer noch Fragen? Dann schaue ins Forum oder schreib mir eine E-mail und hoffe, daß ich mich relativ schnell bei Dir melde!
Diese Seite gehoert zur "C-Control intern"-Internetsite von Dietmar Harlos.