Author Topic: Not quite a total noob needs advice on which microcontroller to play with  (Read 3389 times)

0 Members and 13 Guests are viewing this topic.

Offline IconicPCBTopic starter

  • Super Contributor
  • ***
  • Posts: 1567
  • Country: au
Like the heading say.. I have some experience with ATmega range of micro controllers and C compilers. Some very old experience with Motorola 6800 micro processor family going back to seventies.
I am looking for a recommendation of a micro controller, 16 bit word akin to (with similar range of peripherals ) ATmega range with a C compiler.

Your recommendation will be greatly appreciated.
 

Offline brucehoult

  • Super Contributor
  • ***
  • Posts: 4849
  • Country: nz
It is ABSOLUTELY impossible to say without knowing things such as how much RAM and flash you need, how many I/O pins, what smarter peripherals, what MHz etc etc.

If the ATMega328 can do what you want then the CH32V003 can usually do the same job much faster and cheaper -- $0.10 for an 8 pin package (like ATTiny85) to $0.15 for a 20 pin package, runs at 48 MHz. Same 2k RAM, flash looks less at 16k, but RISC-V code is often going to be much more compact than AVR.

The Raspberry Pi Pico 2 is also an excellent choice for $5, with 520 KB RAM, 4 MB flash, 150 MHz, and your choice (at runtime) of ARMv7 or RISC-V CPUs.

Quote
16 bit word

That pretty much reduces it to PIC24 or MSP430.

But there's not much point in 16 bit when there are scads of 32 bit MCUs that are cheaper.
« Last Edit: January 04, 2025, 12:16:34 pm by brucehoult »
 

Offline IconicPCBTopic starter

  • Super Contributor
  • ***
  • Posts: 1567
  • Country: au
Bruce ,

thanks for the pointer at CH32V003.
WCH have an interesting range of micro controllers.
 

Offline brucehoult

  • Super Contributor
  • ***
  • Posts: 4849
  • Country: nz
WCH have an interesting range of micro controllers.

Yes they do. Good features and price. They've attracted quite a few people from this forum (and others) in the last couple of years. Their (non MCU) usb-uart chip has also taken a lot of market from FTDI.

Incidentally I got my asm programming start on 6502 as a 17 yr old self-teaching from the Apple manual in 1980. In 1983 a couple of uni friends and I designed and built a wire-wrapped 6809 and wrote a simple OS and compiler (BCPL back end from ocode) for it.

Good starter kit

https://www.aliexpress.us/item/1005004895791296.html

50 chip lots

https://www.aliexpress.us/item/1005005036714708.html

Some interesting projects people have done with CH32V003






« Last Edit: January 05, 2025, 11:14:16 am by brucehoult »
 

Offline NorthGuy

  • Super Contributor
  • ***
  • Posts: 3305
  • Country: ca
It's like if you asked for a ball to play with, someone would recommend a basketball, you would take it and go play golf with it. That would be a lot of fun.

What are you going to do with your new MCU?
 

Offline IconicPCBTopic starter

  • Super Contributor
  • ***
  • Posts: 1567
  • Country: au
basket ball has textured surface...just like a golf ball. I wonder if I can play golf with lacrosse stick? After all lacrosse ball is also kind of textured.

I am looking to see if the performance of a 12 or more  bits ADC peripheral can provide reasonable ( noise ) performance.

 

Offline NorthGuy

  • Super Contributor
  • ***
  • Posts: 3305
  • Country: ca
basket ball has textured surface...just like a golf ball. I wonder if I can play golf with lacrosse stick? After all lacrosse ball is also kind of textured.

I've never seen a lacrosse ball. But I'm sure this depends on your ability to add big numbers. As well as your communication skills with the group behind you.

I am looking to see if the performance of a 12 or more  bits ADC peripheral can provide reasonable ( noise ) performance.

There are MCUs which use the same power for digital and ADC and use VDD as an ADC reference. There are others that provide special pins for ADC power, as well as a reference pin for ADC, or even two reference pins (negative and positive). If you provide stable power/reference to such MCUs, you will minimize noise coming from power and reference. Thus, for better ADC performance I would use one of these.

Unfortunately, you probably won't find this information in parametric searches, so you would need to look at datasheets. The datasheet should also list ADC characteristics - accuracy, linearity, offset error etc.
 

Online peter-h

  • Super Contributor
  • ***
  • Posts: 4443
  • Country: gb
  • Doing electronics since the 1960s...
One can't begin to answer this without knowing

- one off or production
- looking short term, or long term for more serious stuff

I recommend STM and ARM32. The Cube IDE toolkit has a learning curve but they probably all do.
Z80 Z180 Z280 Z8 S8 8031 8051 H8/300 H8/500 80x86 90S1200 32F417
 
The following users thanked this post: Dazed_N_Confused

Online Siwastaja

  • Super Contributor
  • ***
  • Posts: 9481
  • Country: fi
In my opinion, noise performance of STM32 microcontrollers is "reasonable"; if that is not enough then probably external ADC is better idea than trying to find a microocontroller with exceptionally good internal ADC performance

I suggest ARM because that enables largest selection of different manufacturers and products while keeping significant part (CPU core, interrupt system, compiler and other tooling, flashing/debugging devices) fixed and reduces time to switch to yet another microcontroller if need arises. STM32 is popular and OK; others are OK too.
 

Online peter-h

  • Super Contributor
  • ***
  • Posts: 4443
  • Country: gb
  • Doing electronics since the 1960s...
Every on-CPU ADC I have ever used exhibited the last 2-3 bits as "random", and meaningful only if you e.g. took 100 readings, added them up, and divided by 100 :) That gives you roughly 3 bits back - assuming the noise is random, not synced to anything, etc.

Fortunately this works OK because these ADCs tend to be pretty fast.
Z80 Z180 Z280 Z8 S8 8031 8051 H8/300 H8/500 80x86 90S1200 32F417
 

Offline NorthGuy

  • Super Contributor
  • ***
  • Posts: 3305
  • Country: ca
Re: Not quite a total noob needs advice on which microcontroller to play with
« Reply #10 on: January 07, 2025, 12:17:36 am »
Every on-CPU ADC I have ever used exhibited the last 2-3 bits as "random", and meaningful only if you e.g. took 100 readings, added them up, and divided by 100 :) That gives you roughly 3 bits back - assuming the noise is random, not synced to anything, etc.

There's a characteristic called "Effective Number of Bits" (ENOB) which tells how many bits in the ADC reading is real. Sometimes it'll be listed in the datasheet.

Not all of the errors are random. You can average out the random noise, but there will be errors which you cannot average. For example, often ADCs have an offset error - every reading is offset by a fixed value, say 3 units higher then it should be. This error won't look like noise, so people often don't see it at all. Even though such errors cannot be removed by averaging, they may be calibrated away if you have something to calibrate against. So, if you try harder, you can improve ADC accuracy, often considerably.
 

Offline brucehoult

  • Super Contributor
  • ***
  • Posts: 4849
  • Country: nz
Re: Not quite a total noob needs advice on which microcontroller to play with
« Reply #11 on: January 07, 2025, 02:32:06 am »
Not all of the errors are random. You can average out the random noise, but there will be errors which you cannot average. For example, often ADCs have an offset error - every reading is offset by a fixed value, say 3 units higher then it should be. This error won't look like noise, so people often don't see it at all. Even though such errors cannot be removed by averaging, they may be calibrated away if you have something to calibrate against. So, if you try harder, you can improve ADC accuracy, often considerably.

While that is true, I find that for the things I want to use an ADC for I really don't care about calibration, but mostly about continuity and monotonicity. Even linearity isn't all that important. I just want to be able to reliably spot a trend when one starts.
 

Offline SiliconWizard

  • Super Contributor
  • ***
  • Posts: 15963
  • Country: fr
Re: Not quite a total noob needs advice on which microcontroller to play with
« Reply #12 on: January 07, 2025, 02:49:20 am »
Some MCUs have an auto-calibration feature that improves the offset & gain error quite a bit. Many STM32's have that. You need to launch the calibration using some registers (or using the HAL function if you use HAL), it's not done automatically when you enable the ADC. You'll still have differential and integral linearity errors, but these are (usually) significantly lower comparatively.
 

Online peter-h

  • Super Contributor
  • ***
  • Posts: 4443
  • Country: gb
  • Doing electronics since the 1960s...
Re: Not quite a total noob needs advice on which microcontroller to play with
« Reply #13 on: January 07, 2025, 09:08:36 am »
Quote
Even though such errors cannot be removed by averaging, they may be calibrated away if you have something to calibrate against. So, if you try harder, you can improve ADC accuracy, often considerably.

Factory calibration is easy to do. I have a < 0.01% accurate calibrator for the analog part of my last product, and the whole operation takes no time at all. In fact for volume it could be fully automated (no knobs to twiddle). The cal coefficients are stored in a FLASH.

Factory cal is often necessary even if the ADC has super low zero and linearity, simply because Vref isn't much good. You pay loads of money for a good reference, but often a TL431 and factory cal is good enough. I am using an ADS1118 which has amazing specs but a 0.5% Vref.

Quote
Some MCUs have an auto-calibration feature that improves the offset & gain error quite a bit. Many STM32's have that.

They do indeed but it's a bit mysterious how good it is, so I never used it. Well, I use it for the on-chip temperature sensor which is obviously not possible to calibrate externally (without major hassle - see the other thread about on-chip temp of 32F4 chips).

I think the noise is mostly random for on-CPU ADCs - simply due to so much RF emitting crap right next to it.
« Last Edit: January 07, 2025, 09:10:33 am by peter-h »
Z80 Z180 Z280 Z8 S8 8031 8051 H8/300 H8/500 80x86 90S1200 32F417
 

Offline Doctorandus_P

  • Super Contributor
  • ***
  • Posts: 4010
  • Country: nl
Re: Not quite a total noob needs advice on which microcontroller to play with
« Reply #14 on: January 07, 2025, 01:05:28 pm »
I started myself with a PIC16F84 Back then it was the only cheap uC. All the others still had ceramic packages with windows to be UV erasable, and those packages were expensive.

Didn't like the horrible crippled assembly, so threw it aside quite quickly.
Then AT90S2313 happened. Nice instruction set, Electrical erasable, GCC available and also cheap enough to not care about the price. I had a lot of fun with those, and their bigger brothers (ATMEGA8, 32, 328 and such).

For the last 15 years I started disliking Atmel. Different programming interfaces every 3 year. Incompatible uC families (tinies, later Xmega's) for no apparent reason, and even simple peripherals change each time, which makes it hard to write a "universal" library that "just works" on (slightly) different uC's.

I thought a while of upgrading to the Xmega's, when my uC's became too slow to drive TFT displays, but the XMega's were very different from the Mega's I was used to. I finally settled on Arm Cortex. I went with STM32, but here are lots of others, from the ATSAM, to the LPC.

Just forget about 16 bit uC's. "The market prophets" have been attempting to talk the 8-bitters into obsolescence form the '90-ies to well into this milennium, but they are still going strong. The 8-bitters will stay (Especially when compatibility with a 5V power supply is a bonus). And while the 8-bitters stayed, the 16 bitters never got much traction and have been superseded by the 32 bitters. (Although I think that ARM Thumb instruction set is some kind of mix between 8-bit and 32 bit, but I only program in C and C++ and did not look too closely at the instruction set).

I bought some "blue Pills" with STM32F103C8T6 when those still were real, but those have been pushed out of the market almost completely by the clones, and I have no interest in debugging those. WeAct has some nice breakout (F411 F431 and more) boards you can put onto a Breadboard. I never liked the big Nucleo boards from STM and their integrated programmer (which doubles the cost of the boards). I've been stuck into a "Getting started with STM32" for 10+ years. The complexity of the IC's is one part of it, and I have a hate / love relationship with STM32 Cube (which got renamed at least 3 times in those 10+ years). for STM32 you sort of need it, to set up the clock domains and distribution, and that works. Unfortunately STM is also pushing the "advanced" things. I dislike the HAL, but the LL is pretty acessible and easy to understand. It's a simple compatibility layer just a bit higher then direct register access. I have been porting parts of the LL into my self written Atmega libraries, to make them compatible with both the old Atmega's, and STM32. It "works", but I'm still having doubts whether it's smart to do so.

Another problem with STM32 is the overwhelming amount of data, and their (lack of) organization. There is a very long thread about STM32 and The Cube software on this forum...

I will stick with STM32. Both because the invested time and resources (programmers, development boards) and because lot's of chinese gadgets use them From power supplies to complete PLC's (Yes, STM32 with built in 24V power supply and hardened IO for EUR30) but I'm not too keen on recommending this path to someone else.

The LPC family is apparently much easier to get started with, but I never used it myself. MBed used to be a very nice site to get a market overview of development boards, but now MBed has stopped, I don't know how long that resource will be available.

I also bought some ESP32 boards, and did a few blinking LED projects. The hardware is capable, and it's also popular with hobbyists and hackers (I.e. lost of "getting started" info and tools freely available). But what I really don't like is that the framework compiles a big blob, and then you have to upload MB of data to the thing, which takes far too much time for me. This programming is done many times during a development day, and it gets boring very quickly. A compile and upload cycle for an STM32 is just a few seconds.

Teensy 4 may also be interesting. It has an LPC controller (and is quite fast) and it has a very beginner friendly interface. You can even use "arduino" out of the box with this thing. Con is that it's a relatively expensive board, at around EUR30. I'm not sure how the transition path is from "Teensy 4" to "Bare bones LPC".

Another consideration (for some) is the packaging for the IC's. Those are ever getting smaller, Do you want to (and can you) solder BGA packages? QFN is apparently easier to solder then QFP, but solder joints on a QFP are easier to inspect (under a microscope)

STM32's product range is from small IC's (around EUR1 a piece) up to very big (Hundreds of pins, Megabytes, Ethernet and parallel LCD interfaces). It has a grow path to beyond what I can ever imagine to need from a microcontroller. LPC is also a big family I think, but Espressiv has a quite limited range with just a few models.


 
The following users thanked this post: IconicPCB, SteveThackery

Online squadchannel

  • Frequent Contributor
  • **
  • Posts: 455
  • Country: jp
  • deepl translate user
Re: Not quite a total noob needs advice on which microcontroller to play with
« Reply #15 on: January 07, 2025, 01:39:35 pm »
But what I really don't like is that the framework compiles a big blob, and then you have to upload MB of data to the thing, which takes far too much time for me. This programming is done many times during a development day, and it gets boring very quickly. A compile and upload cycle for an STM32 is just a few seconds.


yes,yesss!
long compile times are enough to demotivate.

i would also recommend STM32 to switch from 8bit uCs.
 
The following users thanked this post: IconicPCB, tooki

Offline tooki

  • Super Contributor
  • ***
  • Posts: 13280
  • Country: ch
Re: Not quite a total noob needs advice on which microcontroller to play with
« Reply #16 on: January 07, 2025, 01:47:39 pm »
I also bought some ESP32 boards, and did a few blinking LED projects. The hardware is capable, and it's also popular with hobbyists and hackers (I.e. lost of "getting started" info and tools freely available). But what I really don't like is that the framework compiles a big blob, and then you have to upload MB of data to the thing, which takes far too much time for me. This programming is done many times during a development day, and it gets boring very quickly. A compile and upload cycle for an STM32 is just a few seconds.
Absolutely. In the past, I sometimes wrote/debugged specific areas of code on an Arduino Uno (Atmega328P) and then ported it to the ESP32 precisely because of that.

Imagine my surprise on a recent project where I first tried out an ESP32-C3, which is one of the RISC-V–based ESP32’s, and found that it compiles WAY faster than the classic ESP32.

STM32 is still faster to compile (even when using it under Arduino!), but the ESP32-C3 is a lot closer.

For anyone who’s curious, the fastest compile times I’ve had anywhere is with STM32 using Keil. But then you have to put up with Keil…
 

Online peter-h

  • Super Contributor
  • ***
  • Posts: 4443
  • Country: gb
  • Doing electronics since the 1960s...
Re: Not quite a total noob needs advice on which microcontroller to play with
« Reply #17 on: January 07, 2025, 01:56:17 pm »
Great post by Doctorandus_P above. You get so much power for not much money, so your expertise is not wasted when you move to other projects.

Cube MX (the STM "code generator") is handy to get started quickly, and it deals with weird stuff like setting up the clocks. It just saves you reading the RM :)

HAL is code fragments generated by Cube MX. You can use them, or rewrite them, or just read them and pick out the little bit you need. Again, it saves you reading the RM (currently 2000 pages).

The dev tool is Cube IDE. I've been using that for the last few years and it is fine. It has many pluses e.g. standalone, no license, no necessary online checks so the project can be archived, etc. This is the long thread on Cube IDE
https://www.eevblog.com/forum/microcontrollers/is-st-cube-ide-a-piece-of-buggy-crap/

I find compilation and linking are very fast. The download to the STLINK debugger takes a similar time. A minute or so in total.

But for sure if you just want to blink an LED, there are ways with less of a learning curve.
Z80 Z180 Z280 Z8 S8 8031 8051 H8/300 H8/500 80x86 90S1200 32F417
 

Online Atlan

  • Frequent Contributor
  • **
  • Posts: 534
  • Country: sk
Re: Not quite a total noob needs advice on which microcontroller to play with
« Reply #18 on: January 07, 2025, 02:37:01 pm »
Ch32v003 support 5V power.... Stm32f103 is 3V3
FNIRSI 1013D Always provide a picture or video with the problem where the parameters of the oscilloscope are visible, and a picture of the diagnostic screen with the values.
Firmware is here (or not) https://github.com/Atlan4/Fnirsi1013D/tree/main/latest%20firmware%20version
 

Online peter-h

  • Super Contributor
  • ***
  • Posts: 4443
  • Country: gb
  • Doing electronics since the 1960s...
Re: Not quite a total noob needs advice on which microcontroller to play with
« Reply #19 on: January 07, 2025, 03:13:58 pm »
I would not bother with 5V unless there is some unusual reason. Well, the old RS232 chips like MAX232 need 5V, but you can get MAX3232 which is 3.3V. The 3232 is also cheap because TI's version destroyed Maxim's opportunistic outrageous pricing ;)

Also you may have 5V anyway and using a 3.3V LDO for the digital circuit.
Z80 Z180 Z280 Z8 S8 8031 8051 H8/300 H8/500 80x86 90S1200 32F417
 

Online Siwastaja

  • Super Contributor
  • ***
  • Posts: 9481
  • Country: fi
Re: Not quite a total noob needs advice on which microcontroller to play with
« Reply #20 on: January 07, 2025, 04:26:55 pm »
Well, the old RS232 chips like MAX232 need 5V

For supply yes, but even that uses TTL input levels (in the correct meaning of the term, a trap for many young players used to hear it mis-used, but I'm sure you are aware of what that means) so the inputs are directly compatible from 3.3V CMOS, and the outputs can be shifted with resistor divider or just single series resistor into the input pin of the MCU - although many 3.3V MCUs do have 5V-tolerant input pins available, in which case even that is not needed.

Indeed, true 5V CMOS IO is getting a very rare requirement, and in that rare case it is easy enough to level-shift e.g. by using 74HCT buffers.
« Last Edit: January 07, 2025, 04:28:50 pm by Siwastaja »
 

Offline Doctorandus_P

  • Super Contributor
  • ***
  • Posts: 4010
  • Country: nl
Re: Not quite a total noob needs advice on which microcontroller to play with
« Reply #21 on: January 07, 2025, 10:12:41 pm »
I would not bother with 5V unless there is some unusual reason.
Also you may have 5V anyway and using a 3.3V LDO for the digital circuit.

5V compatibility is handy for compatibility with Li-Ion or Li-Fe-Po batteries, as 5V uC's are compatible with these batteries. For a 3V3 uC, you need some kind of voltage regulator, and many voltage regulators ave a much bigger idle current then the uC in sleep.
 

Offline NorthGuy

  • Super Contributor
  • ***
  • Posts: 3305
  • Country: ca
Re: Not quite a total noob needs advice on which microcontroller to play with
« Reply #22 on: January 07, 2025, 10:34:39 pm »
This discussion really reminds me of this Elephant story:

https://en.wikipedia.org/wiki/Blind_men_and_an_elephant
 

Offline brucehoult

  • Super Contributor
  • ***
  • Posts: 4849
  • Country: nz
Re: Not quite a total noob needs advice on which microcontroller to play with
« Reply #23 on: January 08, 2025, 01:01:43 am »
I started myself with a PIC16F84 Back then it was the only cheap uC. All the others still had ceramic packages with windows to be UV erasable, and those packages were expensive.

Didn't like the horrible crippled assembly, so threw it aside quite quickly.

Convolution coding is understandable when you have 12 bit instructions, or 8 bit in other ISAs, but it's starting to get a bit silly when you have 14 bit instructions (as in your PIC16F84) or 16 bit.

It's very nice when you have 32 bit instructions and can express "a = b + c" or "if (a < b) goto c" directly in a single instruction -- even if the total code size in bits is similar.

Quote
I thought a while of upgrading to the Xmega's, when my uC's became too slow to drive TFT displays, but the XMega's were very different from the Mega's I was used to.

Yeah, I haven't seen a point in going to the newer lines if my familiar ATTiny85 or ATMega328 won't do the job.

Quote
I finally settled on Arm Cortex. I went with STM32, but here are lots of others, from the ATSAM, to the LPC.

Arm is cool and advanced the industry, for sure. I did sooo much with ARM7TDMI twenty years ago, and RPi and Odroid boards more recently. And Teensy 4. But now I'd rather RISC-V.

Quote
Just forget about 16 bit uC's. "The market prophets" have been attempting to talk the 8-bitters into obsolescence form the '90-ies to well into this milennium, but they are still going strong. The 8-bitters will stay (Especially when compatibility with a 5V power supply is a bonus). And while the 8-bitters stayed, the 16 bitters never got much traction and have been superseded by the 32 bitters.

Yup. Very little point in 16 bit.

For $0.10 for an 8 pin package, or $0.15 for 20 pin, the 32 bit RISC-V CH32V003 is a great replacement for both ATTiny85 and ATMega328. It's happy with either 3.3V or 5V (or half a Volt either side of that), has as much RAM as the 328. The flash is less at 16k vs 32k, but code size is smaller, especially if dealing with 16 or 32 bit variables. I guess the only downside is no DIP package, but even a chip mounted on a 0.1" breakout board is still a lot cheaper than a 328.

Quote
(Although I think that ARM Thumb instruction set is some kind of mix between 8-bit and 32 bit, but I only program in C and C++ and did not look too closely at the instruction set).

I'm not sure what that means. It's not :-) You can of course load and store 8 and 16 bit values from RAM, but all calculations are in 32 bit. Same with RISC-V.

All instructions in Thumb 1 are 2 bytes long (like in AVR), including BL which looks like a 4 byte instruction but is actually two 2 byte instructions using LR as a tmp value. ARMv6-M as in the Cortex-M0+ makes BL a true (indivisible) 4 byte instruction and adds a couple of CSR instructions to make it a complete stand-alone ISA. Thumb 1 only worked on chips that also implemented the Arm32 ISA (e.g. ARM7TDMI). Thumb 2 (CM-3/4/7) adds lots of 4 byte instructions.

Quote
Teensy 4 may also be interesting. It has an LPC controller (and is quite fast) and it has a very beginner friendly interface. You can even use "arduino" out of the box with this thing. Con is that it's a relatively expensive board, at around EUR30. I'm not sure how the transition path is from "Teensy 4" to "Bare bones LPC".

I bought a Teensy 4 the instant they came out in 2019, and loved it.

I wouldn't buy one now. The $5 Milk-V Duo does everything the Teensy 4 does but has 64 MB RAM instead of 1 MB, and has a 2nd CPU that runs full Linux. You can program the 64 bit MCU core directly, or use an Arduino library supplied by the manufacturer.

Quote
Another consideration (for some) is the packaging for the IC's. Those are ever getting smaller, Do you want to (and can you) solder BGA packages? QFN is apparently easier to solder then QFP, but solder joints on a QFP are easier to inspect (under a microscope)

Yeah, SOP and SOIC are pretty easy, but of course 0.1" DIP are super easy, and missed with newer chips. Chips already mounted on 0.1" breakout boards can be pretty cheap. You mentioned WeAct:

https://www.aliexpress.us/item/1005006217778264.html

 

Online Siwastaja

  • Super Contributor
  • ***
  • Posts: 9481
  • Country: fi
Re: Not quite a total noob needs advice on which microcontroller to play with
« Reply #24 on: January 08, 2025, 10:38:44 am »
This discussion really reminds me of this Elephant story:

Still, discussions like this are not useless. Sure, everybody talks about anything important to them, but even the OP implies ("play with") they have not any specific project in mind. Threads like this are valuable for collecting information from people who have practical experience. Then, when a specific project comes, it offers a better starting point.

I have personally learnt a lot on this forum by just reading all sorts of posts.
 
The following users thanked this post: IconicPCB, SteveThackery


Share me

Digg  Facebook  SlashDot  Delicious  Technorati  Twitter  Google  Yahoo
Smf