<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	>

<channel>
	<title>Elektronik</title>
	<atom:link href="http://blog.cc-robotics.de/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.cc-robotics.de</link>
	<description></description>
	<pubDate>Sun, 31 Jan 2010 21:07:39 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Einen TV wie im Werbebild an die Wand bringen</title>
		<link>http://blog.cc-robotics.de/2010/01/31/einen-tv-wie-im-werbebild-an-die-wand-bringen/</link>
		<comments>http://blog.cc-robotics.de/2010/01/31/einen-tv-wie-im-werbebild-an-die-wand-bringen/#comments</comments>
		<pubDate>Sun, 31 Jan 2010 21:07:39 +0000</pubDate>
		<dc:creator>TJ</dc:creator>
		
		<category><![CDATA[Projekte]]></category>

		<guid isPermaLink="false">http://blog.cc-robotics.de/?p=317</guid>
		<description><![CDATA[Wenn man sich einen ordenltichen TV kauft, soll der auch stilvoll an die Wand, aber wohin mit den Kabeln? Genau, unter den Putz! Hier eine kleine Dokumentation wie das sehr gut und schnell funktioniert.
Zeit: ca. 10 Stunden absolute Arbeitszeit (gemÃ¼tlich und als Laie)
BenÃ¶tigte Materialien: FÃ¼llspachtel fÃ¼r den Heimgebrauch, Wandhalterung, Abdeckfolie
BenÃ¶tigte Werkzeuge: Bohrmaschine, Wasserwage, kleine Flex [...]]]></description>
			<content:encoded><![CDATA[<p>Wenn man sich einen ordenltichen TV kauft, soll der auch stilvoll an die Wand, aber wohin mit den Kabeln? Genau, unter den Putz! Hier eine kleine Dokumentation wie das sehr gut und schnell funktioniert.</p>
<p>Zeit: ca. 10 Stunden absolute Arbeitszeit (gemÃ¼tlich und als Laie)<br />
BenÃ¶tigte Materialien: FÃ¼llspachtel fÃ¼r den Heimgebrauch, Wandhalterung, Abdeckfolie<br />
BenÃ¶tigte Werkzeuge: Bohrmaschine, Wasserwage, kleine Flex mit Diamantscheibe, MeiÃŸel, Spachtel, GipsanrÃ¼hrgummitopf, Schleifpapier, Wandfarbe, Farbrolle, Pinsel</p>
<p>ZunÃ¤chst montiert man die Wandhalterung, das ist klar denke ich. Dann wird der Putz da wo die Kabel nach unten sollen mit der Flex aufgeschnitten, damit es eine saubere Kante gibt. AnschlieÃŸend meiÃŸelt man den Putz von der Wand so tief, dass Ã¼ber die Kabel noch 2 bis 3mm Gips passt.</p>
<p><img src="http://farm5.static.flickr.com/4054/4319399517_8b6fb0a3cc.jpg" alt="IMG_7954" width="500" height="375" border="0" /></p>
<p>Dann werden die Kabel nach MaÃŸ wo sie an den TV angeschlossen werden mit wenig Gips in dem &#8220;Schacht&#8221; fixiert und anschlieÃŸend vollstÃ¤ndig verputzt. Nach einigen Stunden (je nach Gips/Putz) kann man alles glattschleifen, so dass es nicht mehr zu sehen ist. Danach einfach mit der Wandfarbe drÃ¼berstreichen.</p>
<p><a href="http://farm5.static.flickr.com/4057/4319397603_3c7a260fb8.jpg" class="tt-flickr tt-flickr tt-flickr-Small" title="IMG_7955"><img src="http://farm5.static.flickr.com/4057/4319397603_3c7a260fb8_m.jpg" alt="IMG_7955" width="240" height="180" border="0" /></a> <a href="http://farm5.static.flickr.com/4055/4319398313_1b980dc3e0.jpg" class="tt-flickr tt-flickr tt-flickr-Small" title="IMG_7956"><img src="http://farm5.static.flickr.com/4055/4319398313_1b980dc3e0_m.jpg" alt="IMG_7956" width="240" height="180" border="0" /></a> </p>
<p>Am Ende sieht das Ganze dann so aus:</p>
<p><img src="http://farm3.static.flickr.com/2684/4320129264_fe6c670977.jpg" alt="IMG_7957" width="500" height="375" border="0" /><img src="http://farm5.static.flickr.com/4038/4319396847_6e60e57491.jpg" alt="IMG_7961" width="500" height="375" border="0" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cc-robotics.de/2010/01/31/einen-tv-wie-im-werbebild-an-die-wand-bringen/feed/</wfw:commentRss>
		</item>
		<item>
		<title>KRC-778R/KDC-V7521/KDC-7090R Folienleiter wechseln</title>
		<link>http://blog.cc-robotics.de/2009/08/12/krc-778r-folienleiter-wechseln/</link>
		<comments>http://blog.cc-robotics.de/2009/08/12/krc-778r-folienleiter-wechseln/#comments</comments>
		<pubDate>Wed, 12 Aug 2009 16:30:09 +0000</pubDate>
		<dc:creator>TJ</dc:creator>
		
		<category><![CDATA[Kurioses]]></category>

		<category><![CDATA[Mac Gyver]]></category>

		<category><![CDATA[Folienleiter]]></category>

		<category><![CDATA[Kenwood]]></category>

		<guid isPermaLink="false">http://blog.cc-robotics.de/2009/08/12/krc-778r-folienleiter-wechseln/</guid>
		<description><![CDATA[Wer ein oben genanntes Autoradio der Firma Kenwood besitzt wird spÃ¤testens nach 4 Jahren feststellen, dass das Frontpanel langsam immer weniger funktioniert und dann gar nichts mehr tut. GroÃŸe Wirkung â€“ kleine Ursacheâ€¦
Schuld daran ist der Verbinder zwischen Haupteinheit und Frontpanel.&#160; Dieser Folienleiter wird durch das Umklappen des Bedienteils bei jedem Vorgang an einer bestimmten [...]]]></description>
			<content:encoded><![CDATA[<p>Wer ein oben genanntes Autoradio der Firma Kenwood besitzt wird spÃ¤testens nach 4 Jahren feststellen, dass das Frontpanel langsam immer weniger funktioniert und dann gar nichts mehr tut. GroÃŸe Wirkung â€“ kleine Ursacheâ€¦</p>
<p><a href="http://blog.cc-robotics.de/wp-content/uploads/2009/08/img-7657.jpg" rel="lightbox"><img style="border-right-width: 0px; margin: 0px 20px 20px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="IMG_7657" border="0" alt="IMG_7657" align="right" src="http://blog.cc-robotics.de/wp-content/uploads/2009/08/img-7657-thumb.jpg" width="244" height="184"/></a>Schuld daran ist der Verbinder zwischen Haupteinheit und Frontpanel.&nbsp; Dieser Folienleiter wird durch das Umklappen des Bedienteils bei jedem Vorgang an einer bestimmten Stelle geknickt und reiÃŸt nach maximal 4 Jahren ein. Dann ist die Stromversorgung unterbrochen und es wird nichts mehr angezeigt.</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
<p>Zum GlÃ¼ck kann man statt einem neuen Radio diesen Folienleiter (<strong>J84-0121-12</strong>) bestellen: <a href="http://www.tversatzteile.de/shop/product_info.php/info/p4729_Folienleiterkabel-Kenwood-J84-0121-12.html" target="_blank">TV-Ersatzteile</a></p>
<p><br style="clear: both" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cc-robotics.de/2009/08/12/krc-778r-folienleiter-wechseln/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Unterschiede der CAN Transceiver im Highspeed-Betrieb</title>
		<link>http://blog.cc-robotics.de/2009/04/28/unterschiede-der-can-transceiver-im-highspeed-betrieb/</link>
		<comments>http://blog.cc-robotics.de/2009/04/28/unterschiede-der-can-transceiver-im-highspeed-betrieb/#comments</comments>
		<pubDate>Tue, 28 Apr 2009 12:15:51 +0000</pubDate>
		<dc:creator>TJ</dc:creator>
		
		<category><![CDATA[CAN-Bus]]></category>

		<category><![CDATA[CAN]]></category>

		<guid isPermaLink="false">http://blog.cc-robotics.de/2009/04/28/unterschiede-der-can-transceiver-im-highspeed-betrieb/</guid>
		<description><![CDATA[Vor einiger Zeit habe ich in einem Beitrag die Unterschiede zwischen dem MCP2551 und dem PCA82C250 aufgelistet. Ich hatte ebenfalls geschrieben, dass sie bis auf Kleinigkeiten keine nennenswerte Unterschiede haben. Das muss ich an der Stelle revidieren.
Beim CAN-Bus im Highspeed-Betrieb mÃ¼ssen die Leitungen CAN-H und CAN-L auf die Referenzspannung von 2,5V gezogen werden (5V CAN). [...]]]></description>
			<content:encoded><![CDATA[<p>Vor einiger Zeit habe ich in einem <a href="http://blog.cc-robotics.de/2007/04/03/mcp2551-oder-pca82c250-als-can-controller/" target="_blank">Beitrag</a> die Unterschiede zwischen dem <a href="http://ww1.microchip.com/downloads/en/DeviceDoc/21667d.pdf" target="_blank">MCP2551</a> und dem <a href="http://www.nxp.com/acrobat_download/datasheets/PCA82C250_6.pdf" target="_blank">PCA82C250</a> aufgelistet. Ich hatte ebenfalls geschrieben, dass sie bis auf Kleinigkeiten keine nennenswerte Unterschiede haben. Das muss ich an der Stelle revidieren.</p>
<p>Beim CAN-Bus im Highspeed-Betrieb mÃ¼ssen die Leitungen CAN-H und CAN-L auf die Referenzspannung von 2,5V gezogen werden (5V CAN). Der groÃŸe Unterschied ist, dass der <a href="http://ww1.microchip.com/downloads/en/DeviceDoc/21667d.pdf" target="_blank">MCP2551</a> das intern macht, der <a href="http://www.nxp.com/acrobat_download/datasheets/PCA82C250_6.pdf" target="_blank">82C250</a> jedoch nicht. Dort muss man das selbst bei den Knoten implementieren. Erkennen kann man das in den Block-Diagrammen der Chips im Datenblatt und beim Oszilloskopieren des Signals. Meiner Meinung nach ist das nicht nur gut zu wissen, sondern auch ein gravierender Entscheidungspunkt bei der Entwicklung eines eigenen Systems.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cc-robotics.de/2009/04/28/unterschiede-der-can-transceiver-im-highspeed-betrieb/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Galerie und Lightbox</title>
		<link>http://blog.cc-robotics.de/2009/04/20/galerie-und-lightbox/</link>
		<comments>http://blog.cc-robotics.de/2009/04/20/galerie-und-lightbox/#comments</comments>
		<pubDate>Mon, 20 Apr 2009 08:32:02 +0000</pubDate>
		<dc:creator>TJ</dc:creator>
		
		<category><![CDATA[Software]]></category>

		<category><![CDATA[Flickr]]></category>

		<category><![CDATA[Gallerie]]></category>

		<category><![CDATA[Lightbox]]></category>

		<guid isPermaLink="false">http://blog.cc-robotics.de/2009/04/20/galerie-und-lightbox/</guid>
		<description><![CDATA[Nichts ist so bestÃ¤ndig wie die VerÃ¤nderung! Jeder kennt den Satz â€“ so ist es auch bei mir. Ab sofort sind alle Bilder, die in BeitrÃ¤gen verwendet wurden und werden, in einer Flickr Galerie zu sehen. Neben dem Home-Button ist nun ein neuer Button â€œGalerieâ€ entstanden. Dort kann man sich alle Bilder nach Alben sortiert [...]]]></description>
			<content:encoded><![CDATA[<p>Nichts ist so bestÃ¤ndig wie die VerÃ¤nderung! Jeder kennt den Satz â€“ so ist es auch bei mir. Ab sofort sind alle Bilder, die in BeitrÃ¤gen verwendet wurden und werden, in einer <a href="http://www.flickr.com/" target="_blank">Flickr</a> Galerie zu sehen. Neben dem Home-Button ist nun ein neuer Button â€œGalerieâ€ entstanden. Dort kann man sich alle Bilder nach Alben sortiert ansehen.</p>
<p>Des Weiteren werden die Bilder nun etwas schÃ¶ner geÃ¶ffnet, wenn man diese anklickt. DafÃ¼r ist das Tool <a href="http://wordpress.org/extend/plugins/lightbox-2-wordpress-plugin/" target="_blank">Lightbox</a> im Einsatz. Die BeitrÃ¤ge enthalten selbstverstÃ¤ndlich weiterhin Bilder, wie ich sie einfÃ¼ge werde ich noch sehen. Evtl. werden sie direkt aus <a href="http://www.flickr.com/" target="_blank">Flickr</a> mit dem Tool <a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=flickr4writer" target="_blank">Flickr4Writer</a> eingefÃ¼gt und so direkt mit der Galerie verlinkt. Die bestehenden BeitrÃ¤ge werde ich nicht verÃ¤ndern.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cc-robotics.de/2009/04/20/galerie-und-lightbox/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Flickr4Writer</title>
		<link>http://blog.cc-robotics.de/2009/04/19/flickr4writer/</link>
		<comments>http://blog.cc-robotics.de/2009/04/19/flickr4writer/#comments</comments>
		<pubDate>Sun, 19 Apr 2009 12:53:46 +0000</pubDate>
		<dc:creator>TJ</dc:creator>
		
		<category><![CDATA[Software]]></category>

		<category><![CDATA[Flickr]]></category>

		<category><![CDATA[Writer]]></category>

		<guid isPermaLink="false">http://blog.cc-robotics.de/2009/04/19/flickr4writer/</guid>
		<description><![CDATA[Schon lÃ¤nger benutze ich den recht komfortablen Windows Live Writer um meine BeitrÃ¤ge fÃ¼r das Blog zu erstellen, da mich ein Freund darauf gebracht hatte. Seit kurzer Zeit probiere ich Flickr und Lightbox aus um ein paar VerÃ¤nderungen durchzufÃ¼hren, es hieÃŸ jedoch immer, dass man im Windows Live Writer keine Flickr Bilder einfÃ¼gen kann.
Tim Heuer [...]]]></description>
			<content:encoded><![CDATA[<p>Schon lÃ¤nger benutze ich den recht komfortablen <a href="http://download.live.com/writer" target="_blank">Windows Live Writer</a> um meine BeitrÃ¤ge fÃ¼r das Blog zu erstellen, da mich <a href="http://thomas.lippert.it/v4/" target="_blank">ein Freund</a> darauf gebracht hatte. Seit kurzer Zeit probiere ich <a href="http://www.flickr.com/" target="_blank">Flickr</a> und <a href="http://wordpress.org/extend/plugins/lightbox-2-wordpress-plugin/" target="_blank">Lightbox</a> aus um ein paar VerÃ¤nderungen durchzufÃ¼hren, es hieÃŸ jedoch immer, dass man im <a href="http://download.live.com/writer" target="_blank">Windows Live Writer</a> keine <a href="http://www.flickr.com/" target="_blank">Flickr</a> Bilder einfÃ¼gen kann.</p>
<p><a href="http://timheuer.com/blog" target="_blank">Tim Heuer</a> hat dafÃ¼r genau das richtige Plug-In entwickelt. Sein <a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=flickr4writer" target="_blank">Flickr4Writer</a> integriert sich perfekt bei den Writer Plug-Ins und arbeitet tadellos! Man gibt einfach sein <a href="http://www.flickr.com/" target="_blank">Flickr</a> Benutzername ein und autorisiert das Plug-In â€“ fertig. Eine Upload Funktion hat es nicht.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cc-robotics.de/2009/04/19/flickr4writer/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Externe Interrupts mit dem AVR leicht gemacht</title>
		<link>http://blog.cc-robotics.de/2009/04/16/externe-interrupts-mit-dem-avr-leicht-gemacht/</link>
		<comments>http://blog.cc-robotics.de/2009/04/16/externe-interrupts-mit-dem-avr-leicht-gemacht/#comments</comments>
		<pubDate>Thu, 16 Apr 2009 08:40:54 +0000</pubDate>
		<dc:creator>TJ</dc:creator>
		
		<category><![CDATA[Atmel]]></category>

		<category><![CDATA[C]]></category>

		<category><![CDATA[AT90CAN128]]></category>

		<category><![CDATA[avr]]></category>

		<category><![CDATA[Interrupt]]></category>

		<guid isPermaLink="false">http://blog.cc-robotics.de/2009/04/16/externe-interrupts-mit-dem-avr-leicht-gemacht/</guid>
		<description><![CDATA[Die Unterschiede zwischen Polling und Interrupt sind in einem Ã¤lteren Beitrag schon aufgelistet. Theorie findet man jedoch sehr oft. Hier findet ihr ein einfaches Beispiel wie man einen Taster per Interrupt eine Aktion ausÃ¼ben lÃ¤sst. Das Beispiel ist fÃ¼r einen AT90CAN128 mit folgender Hardwarekonfiguration:

- Taster an PORT E, PIN 7 
- LED an PORT E, [...]]]></description>
			<content:encoded><![CDATA[<p>Die Unterschiede zwischen Polling und Interrupt sind in einem <a href="http://blog.cc-robotics.de/2007/04/24/interrupts-mit-dem-pic/" target="_blank">Ã¤lteren Beitrag</a> schon aufgelistet. Theorie findet man jedoch sehr oft. Hier findet ihr ein einfaches Beispiel wie man einen Taster per Interrupt eine Aktion ausÃ¼ben lÃ¤sst. Das Beispiel ist fÃ¼r einen AT90CAN128 mit folgender Hardwarekonfiguration:</p>
<ul>
<li>- Taster an PORT E, PIN 7 </li>
<li>- LED an PORT E, PIN 6 </li>
</ul>
<p>Beim Initialisieren aktiviert man die Interrupts und konfiguriert wann dieser ausgelÃ¶st werden soll:</p>
<p> <code>
<p><font color="#008000">//&#160; Init Taster        <br />DDRE&#160; &amp;= ~_BV(7);&#160;&#160;&#160; // PORT E, PIN 7 als Eingang definieren </font></p>
<p><font color="#008000">EIMSK |= _BV(INT7);&#160; // Interrupt fuer Pin 7 aktivieren        <br />EICRB |= _BV(ISC50); // steigende Flanke erzeugt einen INT         <br />EICRB |= _BV(ISC51); </font></p>
<p><font color="#008000">//&#160; Init LED        <br />DDRE&#160; |= _BV(6);&#160;&#160;&#160;&#160; // PORT E, PIN 6 als Ausgang definieren </font></p>
<p><font color="#008000">sei();&#160;&#160;&#160; //activate global interrups</font></p>
<p> </code>
<p>In der ISR fÃ¼r Signal 7 kann dann eine Aktion erfolgen oder ein selbst erstelltes Flag (in einer Variablen) gesetzt werden.</p>
<p> <code>
<p><font color="#008000">//&#160; ISR Taster        <br />SIGNAL(SIG_INTERRUPT7)         <br />{         <br />&#160; // LED an         <br />&#160; PORTE |= _BV(6); </font></p>
<p><font color="#008000">&#160; // entprellen        <br />&#160; delay_ms(100);         <br />}</font></p>
<p> </code>
<p>Die beiden Dateien stehen <a href="http://blog.cc-robotics.de/wp-content/uploads/2009/04/testprojekt_ext-INT.zip" target="_blank">hier</a> zur VerfÃ¼gung.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cc-robotics.de/2009/04/16/externe-interrupts-mit-dem-avr-leicht-gemacht/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Beispiel CAN Bus Testapplikation fÃ¼r AT90CAN128</title>
		<link>http://blog.cc-robotics.de/2009/04/07/beispiel-can-bus-testapplikation-fr-at90can128/</link>
		<comments>http://blog.cc-robotics.de/2009/04/07/beispiel-can-bus-testapplikation-fr-at90can128/#comments</comments>
		<pubDate>Tue, 07 Apr 2009 12:27:12 +0000</pubDate>
		<dc:creator>TJ</dc:creator>
		
		<category><![CDATA[Atmel]]></category>

		<category><![CDATA[C]]></category>

		<category><![CDATA[CAN-Bus]]></category>

		<category><![CDATA[Software]]></category>

		<category><![CDATA[AT90CAN128]]></category>

		<category><![CDATA[avr]]></category>

		<category><![CDATA[CAN]]></category>

		<guid isPermaLink="false">http://blog.cc-robotics.de/2009/04/07/beispiel-can-bus-testapplikation-fr-at90can128/</guid>
		<description><![CDATA[ Ich habe es in letzter Zeit oft erlebt, dass sich angehende Mikrocontrollerprogrammierer mit dem AT90CAN beschÃ¤ftigen wollen oder mÃ¼ssen um eine CAN Anwendung zu entwickeln. Dabei stÃ¶ÃŸt man immer auf folgendes Problem: Man wird in den Wald geworfen und weiÃŸ nicht welchen Baum man zuerst studieren soll. Wenn man nach einfachen Testanwendungen sucht, dann [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.cc-robotics.de/wp-content/uploads/2009/04/at90can128.jpg"><img style="border: 0pt none; margin: 5px 20px 10px; display: inline;" title="at90can128" src="http://blog.cc-robotics.de/wp-content/uploads/2009/04/at90can128-thumb.jpg" border="0" alt="at90can128" width="178" height="168" align="left" /></a> Ich habe es in letzter Zeit oft erlebt, dass sich angehende Mikrocontrollerprogrammierer mit dem AT90CAN beschÃ¤ftigen wollen oder mÃ¼ssen um eine CAN Anwendung zu entwickeln. Dabei stÃ¶ÃŸt man immer auf folgendes Problem: Man wird in den Wald geworfen und weiÃŸ nicht welchen Baum man zuerst studieren soll. Wenn man nach einfachen Testanwendungen sucht, dann findet man meist ausgeklÃ¼gelte Bibliotheken oder Anwendungen wo man zunÃ¤chst nicht durchsieht. AuÃŸerdem sind die meist viel zu umfangreich und kÃ¶nnen auch beide CAN 2.0 Standards. Diesem Problem mache ich heute ein Ende, hier folgt eine einfache Anwendung fÃ¼r den AT90CAN und eine kleine EinfÃ¼hrung in die Software. Es sind alle Derivate des AT90CAN verwendbar (32, 64, 128), man muss selbstverstÃ¤ndlich beim Kompilieren darauf achten den Richtigen einzustellen.</p>
<p>Beginnen wir mit der Struktur der Software:</p>
<table border="0" cellspacing="0" cellpadding="2" width="549">
<tbody>
<tr>
<td width="200" valign="top">- <a href="http://blog.cc-robotics.de/wp-content/uploads/2009/04/main.c" target="_blank">main.c</a></td>
<td width="347" valign="top">Hauptdatei, Aufruf der Funktionen</td>
</tr>
<tr>
<td width="200" valign="top">- <a href="http://blog.cc-robotics.de/wp-content/uploads/2009/04/at90can.c" target="_blank">at90can.c</a></td>
<td width="347" valign="top">Sourcedatei fÃ¼r CAN-Funktionen, inkl. ISR</td>
</tr>
<tr>
<td width="200" valign="top">- <a href="http://blog.cc-robotics.de/wp-content/uploads/2009/04/at90can.h" target="_blank">at90can.h</a></td>
<td width="347" valign="top">Headerdatei fÃ¼r CAN, Definition der Struktur, Geschwindigkeiten</td>
</tr>
<tr>
<td width="200" valign="top">- <a href="http://blog.cc-robotics.de/wp-content/uploads/2009/04/utils.h" target="_blank">utils.h</a></td>
<td width="347" valign="top">Korrekte Definitionen fÃ¼r True/False und nÃ¼tzliche Dinge</td>
</tr>
</tbody>
</table>
<p>FÃ¼r die Variablen in denen CAN-Nachrichten gespeichert werden sollen wurde eine Struktur <em>CAN_messageType</em> erstellt. Die im Datenblatt empfohlenen Einstellungen fÃ¼r die Geschwindigkeiten sind in einem Feld (array) in der at90can.h hinterlegt. Die Applikation besteht nun darin, dass in der main-Funktion zunÃ¤chst die Initialisierung aufgerufen wird und anschlieÃŸend eine CAN-Botschaft testweise gesendet wird. Die Empfangenen Nachrichten werden nur in der globalen Variable <em>recMsg</em> abgespeichert, jedoch nicht weiter verarbeitet. Bei jeder Operation mit MObs muss die CANPAGE auf das entsprechende gesetzt werden.</p>
<p>Wichtig ist zunÃ¤chst die korrekte <strong>Initialisierung</strong>. Der CAN-Controller muss zum konfigurieren in den <em>config-mode </em>versetzt werden um Geschwindigkeit und Interrupteinstellungen zu Ã¤ndern. Die globalen Interrupts sollte man erst nach der Konfiguration aktivieren, denn sonst kÃ¶nnte mitten in der Konfiguration beim aktivieren der einzelnen Interrupts ein kommender die Konfiguration verfÃ¤lschen. Zur Initialisierung des CAN-Controllers gehÃ¶rt das aktivieren des <em>config-mode</em>, die Einstellungen der Interrupts und das Setzen der Busgeschwindigkeit. Die Konfiguration der einzelnen MObs kann auch in gesonderten Funktionen erledigt werden.</p>
<p>Bei einem <strong>Empfang</strong> einer Nachricht wird in der entsprechenden Interrupt-Service-Routine (ISR) die CAN-Botschaft aus den Registern ausgelesen und in eine globale Variable gespeichert. Variablen die in einer ISR beschrieben werden sollen, mÃ¼ssen als volatile deklariert werden. Nach dem speichern der Daten muss der Interrupt durch readmodwrite resetet werden. Ebenso muss das Bit CONMOB<em>n</em> gesetzt werden, um erneut Empfangsbereitschaft zu signalisieren.</p>
<p>Zum <strong>Senden</strong> einer Nachricht werden die gewÃ¼nschten Daten und ID in einer Variable gespeichert und die Funktion can_tx aufgerufen werden. Diese kopiert die Daten in die Register des Controllers und setzt das Bit CONMOBn des als Sender konfigurierten MOb.</p>
<p>Fragen, Anregungen oder VerbesserungsvorschlÃ¤ge kÃ¶nnen gerne als Kommentare erfolgen!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cc-robotics.de/2009/04/07/beispiel-can-bus-testapplikation-fr-at90can128/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Einstellungen im EEPROM eines AVR speichern</title>
		<link>http://blog.cc-robotics.de/2009/03/20/einstellungen-im-eeprom-eines-avr-speichern/</link>
		<comments>http://blog.cc-robotics.de/2009/03/20/einstellungen-im-eeprom-eines-avr-speichern/#comments</comments>
		<pubDate>Fri, 20 Mar 2009 18:59:17 +0000</pubDate>
		<dc:creator>TJ</dc:creator>
		
		<category><![CDATA[Atmel]]></category>

		<category><![CDATA[C]]></category>

		<category><![CDATA[avr]]></category>

		<category><![CDATA[EEPROM]]></category>

		<guid isPermaLink="false">http://blog.cc-robotics.de/2009/03/20/einstellungen-im-eeprom-eines-avr-speichern/</guid>
		<description><![CDATA[Es gibt kaum eine Anwendung in der man keine Einstellungen speichern mÃ¶chte. Doch wenn man sich schon den Aufwand macht Einstellungen zu speichern, sollten diese nach dem Reset auch wieder abrufbar sein. Daher wird so etwas im EEPROM gespeichert und ausgelesen. Wie man das ganz sinnvoll programmieren kann folgt hier:
Am sinnvollsten Ã¼berlegt man sich vorher [...]]]></description>
			<content:encoded><![CDATA[<p>Es gibt kaum eine Anwendung in der man keine Einstellungen speichern mÃ¶chte. Doch wenn man sich schon den Aufwand macht Einstellungen zu speichern, sollten diese nach dem Reset auch wieder abrufbar sein. Daher wird so etwas im EEPROM gespeichert und ausgelesen. Wie man das ganz sinnvoll programmieren kann folgt hier:</p>
<p>Am sinnvollsten Ã¼berlegt man sich vorher was zu speichern ist, dann erstellt man gesondert dafÃ¼r eine Sourcedatei mit deren Header. Im Header erfolgt die Definition der BenÃ¶tigten Bytes:</p>
<p> <code>
<p><font color="#008000">#define EEPROM_SECTION&#160; __attribute__ ((section (&quot;.eeprom&quot;))) </font></p>
<p><font color="#008000">/*        <br />** this global variables are stored in EEPROM         <br />*/         <br />uint16_t&#160; dummy&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; EEPROM_SECTION&#160; = 0;&#160; // avoid using lowest addresses </font></p>
<p><font color="#008000">//&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;        <br />// section 1: default settings         <br />uint8_t&#160;&#160; eeprom_def_brightness EEPROM_SECTION&#160; = 1;&#160; // EEPROM address 0002         <br />uint16_t&#160; eeprom_def_TempID&#160;&#160;&#160;&#160; EEPROM_SECTION&#160; = 2;&#160; // EEPROM address 0003         <br />uint8_t&#160;&#160; eeprom_def_TempUnit&#160;&#160; EEPROM_SECTION&#160; = 3;&#160; // EEPROM address 0005         <br />uint16_t&#160; eeprom_def_Filter&#160;&#160;&#160;&#160; EEPROM_SECTION&#160; = 4;&#160; // EEPROM address 0006         <br />uint8_t&#160;&#160; eeprom_def_CANspeed&#160;&#160; EEPROM_SECTION&#160; = 5;&#160; // EEPROM address 0008 </font></p>
<p><font color="#008000">// placeholder        <br />uint16_t&#160; eeprom_def_dummy1&#160;&#160;&#160;&#160; EEPROM_SECTION&#160; = 6;&#160; // EEPROM address 0009         <br />uint16_t&#160; eeprom_def_dummy2&#160;&#160;&#160;&#160; EEPROM_SECTION&#160; = 7;&#160; // EEPROM address 000B         <br />uint8_t&#160;&#160; eeprom_def_dummy3&#160;&#160;&#160;&#160; EEPROM_SECTION&#160; = 8;&#160; // EEPROM address 000D         <br />uint8_t&#160;&#160; eeprom_def_dummy4&#160;&#160;&#160;&#160; EEPROM_SECTION&#160; = 9;&#160; // EEPROM address 000E         <br />uint8_t&#160;&#160; eeprom_def_dummy5&#160;&#160;&#160;&#160; EEPROM_SECTION&#160; = 10; // EEPROM address 000F </font></p>
<p><font color="#008000">//&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;        <br />// section 2: user settings         <br />uint8_t&#160;&#160; eeprom_usr_brightness EEPROM_SECTION&#160; = 11;&#160; // EEPROM address 0010         <br />uint16_t&#160; eeprom_usr_TempID&#160;&#160;&#160;&#160; EEPROM_SECTION&#160; = 12;&#160; // EEPROM address 0011         <br />uint8_t&#160;&#160; eeprom_usr_TempUnit&#160;&#160; EEPROM_SECTION&#160; = 13;&#160; // EEPROM address 0013         <br />uint16_t&#160; eeprom_usr_Filter&#160;&#160;&#160;&#160; EEPROM_SECTION&#160; = 14;&#160; // EEPROM address 0014         <br />uint8_t&#160;&#160; eeprom_usr_CANspeed&#160;&#160; EEPROM_SECTION&#160; = 15;&#160; // EEPROM address 0016 </font></p>
<p><font color="#008000">// placeholder        <br />uint16_t&#160; eeprom_usr_dummy11&#160;&#160;&#160; EEPROM_SECTION&#160; = 16;&#160; // EEPROM address 0017         <br />uint16_t&#160; eeprom_usr_dummy12&#160;&#160;&#160; EEPROM_SECTION&#160; = 17;&#160; // EEPROM address 0019         <br />uint8_t&#160;&#160; eeprom_usr_dummy13&#160;&#160;&#160; EEPROM_SECTION&#160; = 18;&#160; // EEPROM address 001B         <br />uint8_t&#160;&#160; eeprom_usr_dummy14&#160;&#160;&#160; EEPROM_SECTION&#160; = 19;&#160; // EEPROM address 001C         <br />uint8_t&#160;&#160; eeprom_usr_dummy15&#160;&#160;&#160; EEPROM_SECTION&#160; = 20;&#160; // EEPROM address 001D</font></p>
<p> </code>
<p>AnschlieÃŸend werden in der Sourcedatei die entsprechend der Reservierung benÃ¶tigten Funktionen erstellt um die Werte zu lesen/schreiben.</p>
<p> <code>
<p><font color="#008000">#include &lt;stdbool.h&gt;        <br />#include &lt;stdint.h&gt;         <br />#include &lt;avr/io.h&gt;         <br />#include &lt;avr/eeprom.h&gt;         <br />#include &quot;eeprom_access.h&quot; </font></p>
<p><font color="#008000">// returns the dataset from eeprom        <br />uint16_t get_eeprom_word(uint8_t setting)         <br />{         <br />&#160; uint16_t&#160;&#160; eeprom_word; </font></p>
<p><font color="#008000">&#160; switch (setting)        <br />&#160; {         <br />&#160;&#160;&#160; case 12:         <br />&#160;&#160;&#160;&#160;&#160; eeprom_word = eeprom_read_word( &amp;eeprom_usr_TempID );         <br />&#160;&#160;&#160;&#160;&#160; break;         <br />&#160;&#160;&#160; case 14:         <br />&#160;&#160;&#160;&#160;&#160; eeprom_word = eeprom_read_word( &amp;eeprom_usr_Filter );         <br />&#160;&#160;&#160;&#160;&#160; break;         <br />&#160;&#160;&#160; default:         <br />&#160;&#160;&#160;&#160;&#160; break;         <br />&#160; }         <br />&#160; return eeprom_word;         <br />} </font></p>
<p><font color="#008000">// save data to eeprom        <br />void set_eeprom_word( uint16_t eeprom_word, uint8_t setting )         <br />{         <br />&#160; switch (setting)         <br />&#160; {         <br />&#160;&#160;&#160; case 12:         <br />&#160;&#160;&#160;&#160;&#160; eeprom_write_word( &amp;eeprom_usr_TempID, eeprom_word );         <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; break;         <br />&#160;&#160;&#160; case 14:         <br />&#160;&#160;&#160;&#160;&#160; eeprom_write_word( &amp;eeprom_usr_Filter, eeprom_word );         <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; break;         <br />&#160;&#160;&#160; default:         <br />&#160;&#160;&#160;&#160;&#160; break;         <br />&#160; }         <br />} </font></p>
<p><font color="#008000">// returns the dataset from eeprom        <br />uint8_t get_eeprom_byte(uint8_t setting)         <br />{         <br />&#160; uint8_t&#160;&#160; eeprom_byte; </font></p>
<p><font color="#008000">&#160; switch (setting)        <br />&#160; {         <br />&#160;&#160;&#160; case 15:         <br />&#160;&#160;&#160;&#160;&#160; eeprom_byte = eeprom_read_byte( &amp;eeprom_usr_CANspeed );         <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; break;         <br />&#160;&#160;&#160; default:         <br />&#160;&#160;&#160;&#160;&#160; break;         <br />&#160; } </font></p>
<p><font color="#008000">&#160; return eeprom_byte;        <br />} </font></p>
<p><font color="#008000">// save data to eeprom        <br />void set_eeprom_byte( uint8_t eeprom_byte, uint8_t setting )         <br />{         <br />&#160; switch (setting)         <br />&#160; {         <br />&#160;&#160;&#160; case 15:         <br />&#160;&#160;&#160;&#160;&#160; eeprom_write_byte( &amp;eeprom_usr_CANspeed, eeprom_byte );         <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; break;         <br />&#160;&#160;&#160; default:         <br />&#160;&#160;&#160;&#160;&#160; break;         <br />&#160; }         <br />}</font></p>
<p> </code>
<p>In der main-Datei (oder wo man die Funktion aufrufen mÃ¶chte) muss anschlieÃŸend definiert werden wie die Einstellungen heiÃŸen und die externen Funktionen deklariert werden.</p>
<p> <code>
<p><font color="#008000">//&#8212;&#8212;&#8211;        <br />// EEPROM         <br />//&#8212;&#8212;&#8211;         <br />// settings         <br />#define CAN_Speed 15         <br />#define CAN_Filter 14         <br />#define Temp_ID 12 </font></p>
<p><font color="#008000">extern void set_eeprom_byte( uint8_t eeprom_byte, uint8_t setting );        <br />extern uint8_t get_eeprom_byte(uint8_t setting);         <br />extern void set_eeprom_word( uint16_t eeprom_word, uint8_t setting );         <br />extern uint16_t get_eeprom_word(uint8_t setting);</font></p>
<p> </code>
<p>Der Aufruf aus der main-Datei kÃ¶nnte dann wie folgt aussehen:</p>
<p> <code>
<p><font color="#008000">CANspeed = get_eeprom_byte(CAN_Speed);</font></p>
<p><font color="#008000">set_eeprom_byte(CANspeed, CAN_Speed);</font></p>
<p></code></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cc-robotics.de/2009/03/20/einstellungen-im-eeprom-eines-avr-speichern/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Alientech Powergate im Check</title>
		<link>http://blog.cc-robotics.de/2009/03/05/alientech-powergate-im-check/</link>
		<comments>http://blog.cc-robotics.de/2009/03/05/alientech-powergate-im-check/#comments</comments>
		<pubDate>Thu, 05 Mar 2009 14:28:42 +0000</pubDate>
		<dc:creator>TJ</dc:creator>
		
		<category><![CDATA[CAN-Bus]]></category>

		<category><![CDATA[Hardware]]></category>

		<category><![CDATA[Atmel]]></category>

		<category><![CDATA[CAN]]></category>

		<category><![CDATA[Powergate]]></category>

		<guid isPermaLink="false">http://blog.cc-robotics.de/2009/03/05/alientech-powergate-im-check/</guid>
		<description><![CDATA[Ich hatte neulich mal die Gelegenheit ein ECU-flasher (ProgrammiergerÃ¤t fÃ¼r MotorsteuergerÃ¤t) zu testen. Das GerÃ¤t kam aus dem Hause Alientech und nennt sich Powergate Pro. Interessant zu sehen fand ich, dass auch hier ein AT90CAN128 als Controller verwendet wurde, ein recht bekannter Chip mit integriertem CAN Controller und einigen mÃ¤chtigen Features. Daneben platzierte man die [...]]]></description>
			<content:encoded><![CDATA[<p>Ich hatte neulich mal die Gelegenheit ein ECU-flasher (ProgrammiergerÃ¤t fÃ¼r MotorsteuergerÃ¤t) zu testen. Das GerÃ¤t kam aus dem Hause <a href="http://www.alientech-to.it/" target="_blank">Alientech</a> und nennt sich <a href="http://www.alientech-to.it/index.php?option=com_content&amp;task=view&amp;id=17&amp;Itemid=27" target="_blank">Powergate Pro</a>. Interessant zu sehen fand ich, dass auch hier ein AT90CAN128 als Controller verwendet wurde, ein recht bekannter Chip mit integriertem CAN Controller und einigen mÃ¤chtigen Features. Daneben platzierte man die Ã¼blichen VerdÃ¤chtigen wie FT245BL, M6636B, 7805C, PCA82C250 und vier Flashbausteine a 16MB AT45DB161.</p>
<p><a href="http://blog.cc-robotics.de/wp-content/uploads/2009/03/powergate.jpg"><img style="border: 0pt none; margin: 0px 0px 0px 20px; display: inline;" title="powergate" src="http://blog.cc-robotics.de/wp-content/uploads/2009/03/powergate-thumb.jpg" border="0" alt="powergate" width="244" height="215" /></a></p>
<p>Zu sagen ist, dass die Komponenten recht gut verlÃ¶tet sind und sehr sauber platziert. Die Leiterbahnverlegung und Anordnung der Controller halte ich allerdings fÃ¼r fragwÃ¼rdig. Negativ anzumerken ist, dass ein Fahrzeug nur einmal geflasht werden kann.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cc-robotics.de/2009/03/05/alientech-powergate-im-check/feed/</wfw:commentRss>
		</item>
		<item>
		<title>CANlogger mit Temperaturmessung</title>
		<link>http://blog.cc-robotics.de/2009/02/21/canlogger-mit-temperaturmessung/</link>
		<comments>http://blog.cc-robotics.de/2009/02/21/canlogger-mit-temperaturmessung/#comments</comments>
		<pubDate>Sat, 21 Feb 2009 16:07:56 +0000</pubDate>
		<dc:creator>TJ</dc:creator>
		
		<category><![CDATA[Atmel]]></category>

		<category><![CDATA[C]]></category>

		<category><![CDATA[CAN-Bus]]></category>

		<category><![CDATA[Hardware]]></category>

		<category><![CDATA[Projekte]]></category>

		<category><![CDATA[Software]]></category>

		<category><![CDATA[Target]]></category>

		<category><![CDATA[AT90CAN128]]></category>

		<category><![CDATA[avr]]></category>

		<category><![CDATA[CAN]]></category>

		<category><![CDATA[Display3000]]></category>

		<category><![CDATA[TFT]]></category>

		<guid isPermaLink="false">http://blog.cc-robotics.de/2009/02/21/canlogger-mit-temperaturmessung/</guid>
		<description><![CDATA[Vor einiger Zeit hatte ich das Konzept der Projektarbeit schon einmal vorgestellt. Nun wurde Version 1.0 fertig gestellt.
Features:

- Temperaturmessung mit Thermoelement und MAX6675 
- ISP Stecker nach ATMEL Standard 
- Schutz zum CAN durch DC-DC und Optokoppler 
- CAN Stecker ist CAN-CiA konform 
- Stromversorgung wÃ¤hlbar zwischen CAN und extern 
- zusÃ¤tzlich IÂ²C EEPROM auflÃ¶tbar [...]]]></description>
			<content:encoded><![CDATA[<p>Vor einiger Zeit hatte ich das <a href="http://blog.cc-robotics.de/2008/11/13/projektarbeit-canlogger-mit-temperaturmessung/" target="_blank">Konzept der Projektarbeit</a> schon einmal vorgestellt. Nun wurde Version 1.0 fertig gestellt.</p>
<p>Features:</p>
<ul>
<li>- Temperaturmessung mit Thermoelement und MAX6675 </li>
<li>- ISP Stecker nach <a href="http://www.atmel.de/" target="_blank">ATMEL</a> Standard </li>
<li>- Schutz zum CAN durch DC-DC und Optokoppler </li>
<li>- CAN Stecker ist <a href="http://www.can-cia.org/" target="_blank">CAN-CiA</a> konform </li>
<li>- Stromversorgung wÃ¤hlbar zwischen CAN und extern </li>
<li>- zusÃ¤tzlich IÂ²C EEPROM auflÃ¶tbar fÃ¼r groÃŸe Bilder </li>
<li>- EinstellmÃ¶glichkeit mit Drehgeber fÃ¼r CAN-Speed, ID und Filter </li>
<li>- Anzeige von empfangenen CAN-Nachrichten auf dem TFT </li>
<li>- 65k Farb-TFT mit 176&#215;132 Pixel von <a href="http://www.display3000.com" target="_blank">display3000</a> </li>
</ul>
<p>Hier eine kleine Demo des Moduls:</p>
<div class="wlWriterEditableSmartContent" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:889565d8-5313-42f2-9d0a-ffc33f9d452d" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px">
<div><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/M94zGI45YoE&amp;hl=de&amp;fs=1&amp;hl=en"></param><embed src="http://www.youtube.com/v/M94zGI45YoE&amp;hl=de&amp;fs=1&amp;hl=en" type="application/x-shockwave-flash" width="425" height="355"></embed></object></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.cc-robotics.de/2009/02/21/canlogger-mit-temperaturmessung/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>

